Javascript BackboneJS:迭代模型属性并更改值
我想创建一个函数,其功能类似于Javascript BackboneJS:迭代模型属性并更改值,javascript,backbone.js,underscore.js,backbone-model,Javascript,Backbone.js,Underscore.js,Backbone Model,我想创建一个函数,其功能类似于toJSON()的返回和编辑模型的功能 我的问题是如何迭代模型的属性并编辑所选属性的特定值 如果有型号,例如: Item = Backbone.Model.extend({ defaults: { name: '', amount: 0.00 }, toHTML: function(){ // i think this is the place where // where i
toJSON()
的返回和编辑模型的功能
我的问题是如何迭代模型的属性并编辑所选属性的特定值
如果有型号,例如:
Item = Backbone.Model.extend({
defaults: {
name: '',
amount: 0.00
},
toHTML: function(){
// i think this is the place where
// where i can do that function?
//
console.log(this.attribute)
}
});
var item = new Item;
item.set({name: 'Pencil', amount: 5}):
item.toJSON();
-> {name: 'Pencil', amount: 5}
// this is the function
item.toHTML();
-> {name: 'Pencil', amount: 5.00}
如果要迭代模型的属性,请使用哈希:
使用示例代码。如果要迭代模型的属性,请使用哈希:
使用示例代码。您可以使用迭代在对象上进行迭代,然后使用设置数字格式:
toHTML: function() {
var attrs = { }, k;
for(k in this.attributes) {
attrs[k] = this.attributes[k];
if(k === 'amount')
attrs[k] = attrs[k].toFixed(2);
}
return attrs;
}
请注意,amount
将显示为字符串,但这是获得5.00
而不是5
的唯一方法。我可能会将格式设置留给模板,而不必为这个toHTML
实现操心
演示:您可以使用迭代在对象上迭代,然后使用格式化数字:
toHTML: function() {
var attrs = { }, k;
for(k in this.attributes) {
attrs[k] = this.attributes[k];
if(k === 'amount')
attrs[k] = attrs[k].toFixed(2);
}
return attrs;
}
请注意,amount
将显示为字符串,但这是获得5.00
而不是5
的唯一方法。我可能会将格式设置留给模板,而不必为这个toHTML
实现操心
演示:尽管这里提供的答案是正确的,可以满足您的要求。但我认为更好的方法是为此使用下划线函数。 对于简单的循环,您可以使用
_.each(list, iteratee, [context])
_.each(model.attributes, function(item, index, items){
console.log(item);
console.log(index);
})
您还可以根据您的具体需要使用专门的功能。例如,如果您希望在列表的每个元素上应用一些函数后得到一个新的结果数组,那么map可能是您的最佳选择
_.map(list, iteratee, [context])
var newList = _.map(model.attributes, function(item, index, list){
return item * 5;
})
我建议您仔细阅读下划线和主干的文档,以获得满足您需要的最佳功能 虽然这里提供的答案是正确的,可以满足您的要求。但我认为更好的方法是为此使用下划线函数。 对于简单的循环,您可以使用
_.each(list, iteratee, [context])
_.each(model.attributes, function(item, index, items){
console.log(item);
console.log(index);
})
您还可以根据您的具体需要使用专门的功能。例如,如果您希望在列表的每个元素上应用一些函数后得到一个新的结果数组,那么map可能是您的最佳选择
_.map(list, iteratee, [context])
var newList = _.map(model.attributes, function(item, index, list){
return item * 5;
})
我建议您仔细阅读下划线和主干的文档,以获得满足您需要的最佳功能 酷!谢谢你帮助像我们这样的人!我的计划是使渲染像这样-->this.el.html(this.template(this.model.toHTML());这将起作用,并且有一个单独的“为模板序列化”方法(例如
toHTML
)以便可以使用toJSON
与服务器对话是一个好主意。不过,我可能会将toFixed
调用留给模板。是的toHTML
仅用于渲染目的。如果我的toHTML
中的金额值是1550.00
,toJSON
仍然有1500.00
值,而toFixed
我试图定制,因为toFixed
无法实现。无论如何,非常感谢你的帮助!干杯酷!谢谢你帮助像我们这样的人!我的计划是使渲染像这样-->this.el.html(this.template(this.model.toHTML());这将起作用,并且有一个单独的“为模板序列化”方法(例如toHTML
)以便可以使用toJSON
与服务器对话是一个好主意。不过,我可能会将toFixed
调用留给模板。是的toHTML
仅用于渲染目的。如果我的toHTML
中的金额值是1550.00
,toJSON
仍然有1500.00
值,而toFixed
我试图定制,因为toFixed
无法实现。无论如何,非常感谢你的帮助!干杯