2016-01-20 84 views
0

骨幹模型具有屬性「selectedYear」。我需要將這個「selectedYear」屬性傳遞給Handlebars Custom Helper。將骨幹模型屬性傳遞給Handlebars Helper

var sq2SelectCarYearModel = Backbone.Model.extend({ 

    urlRoot: "api/caryears", 
    selectedYear: "0" 


}); 

這是我曾嘗試: 這是車把模板:

template: Handlebars.compile("{{#times 27 this.model.attributes.selectedYear}}{{/times}}") 

把手助手聲明:

Handlebars.registerHelper('times', function(n, selectedYear, block) { 
    // I need to use "this.model.attributes.selectedYear" here 

}); 

PS: 「次」 是自定義的名稱helper,「n」是循環運行的次數。

我也試過這樣:

template: Handlebars.compile("{{#times 27 selectedYear}}{{/times}}") 

,但它仍然不工作。

+0

想知道答案是否幫...! –

回答

0

應設置selectedYear模型的defaults

var sq2SelectCarYearModel = Backbone.Model.extend({ 
    urlRoot: "api/caryears", 
    defaults: { 
    selectedYear: "0" 
    } 
}); 

因此,它會被添加到模型attributes財產。爲了在創建之後對其進行設置,您應該使用set()方法,這會將屬性添加到模型屬性哈希值。

現在,它被添加爲模型中的直接屬性,this.model.selectedYear可能有效,但不是正確的方式。數據應添加到模型屬性散列中,以便其他事情(如事件)正常工作

1

selectedYear不是模型上的屬性,而是屬性。

您可以通過執行其設置爲默認:

var CarModel = Backbone.Model.extend({ 
    urlRoot: 'api/caryears', 

    defaults: { 
    selectedYear: 0 
    } 
}); 

var model = new CarModel() 
// model.get('selectedYear') -> 0 

你也可以通過它在實例

var model2 = new Model({ selectedYear: 2 }); 
// model2.get('selectedYear') -> 2 

,或者你可以實例化後設置:

var model3 = new Model(); 
model3.set('selectedYear', 3); 
// model3.get('selectedYear') -> 3 

編輯

要使用模型屬性中的骨幹視圖,我建議做一些像下面

var MyView = Backbone.View.extend({ 
    initialize: function() { 
    this.model = new Model({ 
     selectedYear: 1 
    }); 
    }, 

    render: function() { 
    var template = Handlebars.compile("{{#times 27 selectedYear}}{{/times}}"); 
    this.$el.html(template(this.model.toJSON)); 
    } 
}); 

Backbone.Marionette做了很多這方面的你 - 如果你給一個木偶視圖模板,它會自動傳入模型屬性,因此您不需要提供render方法。

如:

var MyView = Marionette.ItemView.extend({ 
    template: Handlebars.compile('your template here') 
}); 

var model = new Model({selectedYear: 1}); 

var view = new view({model: model}); 

view.render(); 

// or region.show(view) which will automatically render the view. 
+0

thankyou,當我嘗試傳遞一個參數作爲一個值的句柄,它工作正常,如:{{#times 27'1993'}} {{/ times}},你可以看到我通過了「1993」作爲參數,我可以在Handlebars幫助聲明中使用它,但我需要傳入model.selectedYear,而不是使其動態化 – Mark