2013-05-15 60 views
1

我有一個Ember.js ArrayController和看起來像這樣變量傳給燼車把

<p>{{length}} {{pluralize length "thing"}}</p> 

然後我有一個車把幫手,看起來像

Handlebars.registerHelper('pluralize', function(count, str){ 
    debugger; 
    return (count > 1 ? str+"s" : str); 
    } 
); 

當一些車把代碼調試器休息我觀察看到count = 'length'不是我所期望的數字。

那麼是什麼給?什麼是完成我明顯任務的正確方法。

回答

5

工作小提琴這裏。 http://jsfiddle.net/MwTuw/2/

訣竅是使用Ember.registerBoundHelper,它將所有相關數據作爲函數的最終參數傳遞。

Ember.Handlebars.registerBoundHelper('pluralize', function (count) { 
    var options = Array.prototype.pop.call(arguments); 
    var string = options.data.properties[1]; 
    return (count > 1 ? string+"s" : string); 
}); 

此刪除所需要與其他溶液和指添加或刪除額外的對象將相應地更新值的{{if controller.length}}黑客攻擊。

+0

總是前進一步:) – intuitivepixel

2

如何:

Ember.Handlebars.registerHelper('pluralize', function (property, options) { 
    var count = Ember.Handlebars.get(this, property, options); 
    var _options = options; 
    count = parseInt(count, 10); //to be sure ... 
    if (count > 1) { 
    _options = _options.concat('s'); 
    } 
    return new Handlebars.SafeString(_options); 
}); 

編輯

這裏是一個工作fiddle

EDIT 2

這是你的工作更新fiddle

基本問題是,車把幫手是在演戲,當控制器仍然沒有記錄,我添加了一個if助手,關於controller.length和火災的時候聽一聽它的變化,因此也調用車把助手模板解析價值。

希望它可以幫助

+0

不,計數設置爲零。我正在尋找使用陣列控制器上的屬性(它的長度)。 – Intentss

+0

你可以顯示(更多)模板的計數值住在哪裏? – intuitivepixel

+0

我已經添加了一個工作小提琴,嘗試將ApplicationController的計數更改爲1,例如看到複數消失... – intuitivepixel

1

使用Ember.registerBoundHelper將使所有在模板中的鍵值對可作爲助手中的第二個參數的散列:

把手模板:

{{orderShow dataOrderBy key1="value1" key2="value2" ... keyN="valueN"}} 

Javascript:

Ember.Handlebars.registerBoundHelper('orderShow', function(order, options) { 
    if(options) { 
    for(var prop in options.hash) { 
      alert(prop + '="' + options.hash[prop] + '"') 
    } 
    } 

    return order; 
} 

此行爲在下一頁末尾描述:http://handlebarsjs.com/expressions.html