我的骨幹模型有一個布爾值(isRegistered)。當我渲染視圖時,我想根據布爾值的真/假值選中或取消選中複選框。Backbone.js - 檢查複選框的最佳方法是什麼
我現在的工作是這樣的:
<input id="isRegisteredCheckbox" checked="<%= isRegistered ? 'checked': ''"/>
這不起作用,因爲根據W3C規範checked屬性需要完全去除,以取消選中的複選框。
我該如何使用骨幹模板做到這一點?
我的骨幹模型有一個布爾值(isRegistered)。當我渲染視圖時,我想根據布爾值的真/假值選中或取消選中複選框。Backbone.js - 檢查複選框的最佳方法是什麼
我現在的工作是這樣的:
<input id="isRegisteredCheckbox" checked="<%= isRegistered ? 'checked': ''"/>
這不起作用,因爲根據W3C規範checked屬性需要完全去除,以取消選中的複選框。
我該如何使用骨幹模板做到這一點?
你不需要checked=
部分。只需在標籤中打印出需要檢查的標籤即可。
現在,我們已經確定,只是打印 「選中」 了是有效的HTML,你可以嘗試簡單:
渲染:
var registered;
var tmpl = _.template(your template);
isRegistered ? registered = 'checked' : registered = '';
var tmpl_data = _.extend(this.model.toJSON(), {registered: registered}); // or whatever values you need to add
$(this.el).html(tmpl(tmpl_data));
模板:
<input type="checkbox" {{ registered }}>
使用此方法無需在模板中使用混亂的條件。
你可以使用一個測試附上checked='checked'
<input id="isRegisteredCheckbox" <% if (isRegistered) { %>checked="checked"<% } %> />
我用一個Decorator
這個案件。我在這裏暴露的它如何看起來像一個例子:
// code simplified and not tested
var MyModelDecorator = Backbone.Model.extend({
initialize: function(opts){
this.model = opts.model;
},
toJSON: function(){
var json =
_.extend(
this.model.toJSON(),
{
checked: this.checked(),
css_classes: this.cssClasses()
}
);
return json;
},
checked: function(){
result = "";
if(this.model.get("checked")) result += "checked=\"true\"";
return result;
},
cssClasses: function(){
result = "";
if(this.model.get("checked")) result += " checked";
if(this.model.get("key") == "value") result += " important";
return result;
}
});
我增加了一個額外的css_classes
裝飾屬性所以你可以看到這種方法可以是幾種情況的常見解決方案。
你View.render
可以是這樣的:
// code simplified and not tested
var myView = Backbone.View.extend({
template: _.template("<input id=\"isRegisteredCheckbox\" <%= checked %> class=\"<%= css_classes %>\" />"),
render: function(){
var decorator = new MyModelDecorator({ model: this.model });
this.$el.html(this.template(decorator.toJSON()));
}
});
我有,我繼承別人的Django的+ hamlpy(HAML)+ Backbone.js的+ Undescore.js與鬍鬚模板類似的問題(什麼亂七八糟的!)在hamlpy
Haml的處理並不完全一樣:
%input{ :checked => {{isChecked}} ? true : None }
或任何類似的事情。我有一個Django hamlpy stacktrace。
我設法用鬍子的反向的段砍(請參閱:http://mustache.github.com/mustache.5.html)
{#isChecked}
%input{:checked => 'true' }
{/isChecked}
{^isChecked}
%input{ ... without the checked attribute ... }
{/isChecked}
不管怎樣,希望幫助一些貧困的Google用戶浪費自己的生命的力量小時!
這是一個非常簡單的方法。
<input <% if(isRegistered) print("CHECKED"); %> type="checkbox" id="isRegisteredCheckbox" />
注意,我使用<%且不<(%)=爲條件。
你可以只設置isRegistered的值設置爲 「在你的模型,並呼籲
<input id="isRegisteredCheckbox" <%= registered %> />
的東西,如
serialize: function() {
var isChecked = (isRegistered) ? "CHECKED" : "";
return {registered : ischecked};
},
value =「<%= item.id%>」/> – 2015-04-13 19:18:16