Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/410.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript BackboneJS:迭代模型属性并更改值_Javascript_Backbone.js_Underscore.js_Backbone Model - Fatal编程技术网

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
无法实现。无论如何,非常感谢你的帮助!干杯