2013-10-17 68 views
0

我擴展了默認較少的功能來支持一些基本列表。我添加「第n個」給定爲以下的函數:如何讓一個字符串指向一個變量爲Less?

"nth": function(obj, index){ 
    var list = obj.value.split(","); 
    var n = index.value; 
    obj.value = list[n-1].trim(); 
    return new tree.Anonymous(obj); 
} 

然後,我添加另一個函數「convertstrtovar」如下:

convertstrtovar: function(obj){ 
    var str = obj.value.toString(); 
    str = str.replace(/(@)/gi, ''); 
    str = '~"@{' + str + '}"'; 
    obj.value = str; 
    return new tree.Anonymous(obj); 
} 

此接收字符串,如「@white」並將其轉換爲〜」 @{白色}」。下面給出了更少mixin的示例代碼。

@button-text-colors: "@white, @dark, @red"; //parsed as a comma separated list. 
@white: white; 
@dark: black; 
@red: red; 

.something(@color){ 
    color: @color; 
} 

.some{ 
    @t: convertstrtovar(nth(@button-text-colors, 1)); 
    .something(@t); 
} 

這使我輸出如下:

.some { 
    color: ~"@{white}"; 
} 

爲什麼〜「@ {白}」被打印出字符串和不評價爲可變白色時通常〜「@ {白}」少獲得存儲在@white中的值?

+0

聽起來像你需要第二次評估迭代?不知道這是否會有所幫助,但也許看看:http://movableapp.com/2012/08/execute-complex-javascript-in-lesscss/。 –

+0

@ user2036771 >「nth」:function(obj,index); Doh!您再次重新發明了一個輪子:LESS已經具有完全相同的提取功能 –

+0

@ seven-phases-max我找不到任何對extract()的引用。你能指點我嗎? – suparngp

回答

1

爲什麼〜「@ {白}」被打印出字符串和不評價爲可變白色時通常〜「@ {白}」

,因爲較少的計算結果的那些東西,它解析時輸入(但你的函數在那之後創建一個新的字符串對象)。

其實你可以實現你想要的只是默認LESS語言結構是什麼(W/O任何需要自定義函數的黑客):

@button-text-colors: 'white', 'dark', 'red'; 
@white: white; 
@dark: black; 
@red: red; 

.something(@color){ 
    color: @color; 
} 

.some{ 
    @t: extract(@button-text-colors, 1); 
    .something(@@t); 
} 

沒有,說真的,我建議你考慮更多地瞭解現有LESS功能,然後再嘗試使用自定義功能進行擴展...(儘管我必須承認過時的LESS文檔是一個重大問題 - 至少看看https://github.com/SomMeri/less4j/wiki/_pages - 這是目前最詳細的LESS文檔)。

+0

我明白了!感謝您的幫助。我應該搜索更多:)。編寫這些自定義函數的一個原因是,我正在處理一個需要我將SASS文件轉換爲Less的項目。所以爲了保留現有的東西並減少更改次數,我決定模仿SASS中命名的函數名稱。 – suparngp

+0

然後,我也建議你也仔細看看https://github.com/less/less.js/issues--並不是說它在那裏找到什麼特別的東西,但是當你想要被告知最新的功能和新聞只是...順便說一句,版本1.5.0是在其最後的測試版,它也有一些小的好東西在這裏和那裏,可以幫助你在你的工作。(還有一些小問題主要與'sourcemaps'和高級'extend'有關,但在向後兼容的背景下它非常穩定,所以我想現在我可能會推薦新版本) –

+0

我只是把最新的代碼。使用列表和新功能簡直太棒了。謝謝。 – suparngp

相關問題