2012-04-17 66 views
0

嘗試訪問索引值,而迭代餘燼集合,可以訪問索引值是這樣的:訪問索引值,而迭代灰燼收集

{{_parentView.contentIndex}} 

但是,試圖訪問比較幫手相同的索引值並不時看到這個值。任何幫助如何訪問幫助內的索引將不勝感激。

代碼:

{{#each App.SampleController}} 
    {{#view App.HomeView contentBinding="this"}} 
     Index : {{_parentView.contentIndex}} 
     {{#compare _parentView.contentIndex "0" operator="=="}} 
     {{/compare} 
    {{/view}} 
{{/each}} 

輸出:

Index: 0 and the value getting passed into compare helper is `_parentView.contentIndex` as a string! 

比較助手看起來像這樣:

Ember.Handlebars.registerHelper('compare', function(lvalue, rvalue, options) { 

    if (arguments.length < 3) 
    throw new Error("Handlerbars Helper 'compare' needs 2 parameters"); 

operator = options.hash.operator || "=="; 

var operators = { 
    '==':  function(l,r) { return l == r; }, 
    '===':  function(l,r) { return l === r; }, 
    '!=':  function(l,r) { return l != r; }, 
    '<':  function(l,r) { return l < r; }, 
    '>':  function(l,r) { return l > r; }, 
    '<=':  function(l,r) { return l <= r; }, 
    '>=':  function(l,r) { return l >= r; }, 
    'typeof': function(l,r) { return typeof l == r; } 
}; 

if (!operators[operator]) 
    throw new Error("Handlerbars Helper 'compare' doesn't know the operator "+operator); 

console.log("operator is "+ lvalue +" and "+rvalue); 
var result = operators[operator](lvalue,rvalue); 
console.log("result from compare registerHelper is "+ result); 

if(result) { 
    return options.fn(this); 
} else { 
    return options.inverse(this); 
} 

});

+0

什麼是你的'compare'幫手是什麼樣子? – pangratz 2012-04-17 12:16:34

+0

新增比較幫手..以上 – user1338121 2012-04-19 12:30:26

回答

1

傳遞給你的幫助器的第一個參數實際上是一個字符串,它代表了值應該被解析的屬性的路徑。因此,爲了讓您的lvalue你必須做類似的規定,見http://jsfiddle.net/pangratz666/DLPgN/

Ember.Handlebars.registerHelper('compare', function(path, compareValue, options) { 

    ... 

    // options.contexts[0] is the passed context 
    // path is the path to the property of the context 
    var lvalue = Ember.getPath(options.contexts[0], path); 
    var rvalue = parseInt(compareValue, 10); // convert to number since it's a string 

    ... 

    var result = operators[operator](lvalue, rvalue); 

});​ 
+0

謝謝..解決了這個問題 – user1338121 2012-04-19 14:28:30