Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/378.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.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 主干模型的定义属性_Javascript_Backbone.js - Fatal编程技术网

Javascript 主干模型的定义属性

Javascript 主干模型的定义属性,javascript,backbone.js,Javascript,Backbone.js,如果我想向主干模型添加自定义属性,这是最好的方法吗?对于我想要实现的功能,是否有更好的方法或完全不同的方法 var myModel = Backbone.Model.extend({ defaults:{ monthly_amount: 100 }, initialize: function(model, options){ var m = this; Object.defineProperty(this,"yearly_amount",{

如果我想向主干模型添加自定义属性,这是最好的方法吗?对于我想要实现的功能,是否有更好的方法或完全不同的方法

var myModel = Backbone.Model.extend({

   defaults:{
    monthly_amount: 100
   },

   initialize: function(model, options){

     var m = this;

     Object.defineProperty(this,"yearly_amount",{
       get: function() {
                         return (m.get("monthly_amount") * 12);
                       },
       set: function(value) {
                         m.set("monthly_amount", (value/12) );
                       }
     });

   }
});
谢谢


编辑:属性只是“虚拟的”,在将模型保存到服务器时,我不希望它在模型属性中。

因此这里的一般问题通常被称为“计算属性”,并且有主干插件提供了这一点(见下文)。主干使用
get/set
方法调用样式,而不是
defineProperty
样式,因此您的方法将使值计算对视图不透明,因此与主干的设计有很大的不同。维护适当的
get/set
change
接口的插件将维护基本模型API,这样视图就不必以不同的方式对待这个特定的模型属性

另见

可用插件:


当您将属性设置为默认项目时,它会转到属性,但它不适合我们。 由于主干模型是一个常规对象,您可以访问它的属性作为对象属性:

var myModel = Backbone.Model.extend({}),
    model = new myModel();

model.monthly_amount = 50;
console.log(model.monthly_amount)
或者像这样创建setter和getter:

var myModel = Backbone.Model.extend({
    setMonthlyAmount: function (value) {
        this.monthly_amount = value;
    },

    getMonthlyAmount: function () {
        return this.monthly_amount;
    }

});

//access with getter/setter
var model = new myModel();

model.setMonthlyAmount(20);
var result = model.getMonthlyAmount();
console.log(result);

是否会覆盖save方法,只包含您想要的字段作为选项?不完全是这样,因为如果我将年度金额作为单独的属性添加,并在save方法中排除它,则年度金额与月度金额的关系并不总是正确的。当我想要模型中的临时字段时,我只为对象本身创建一个字段。然后我将运行时需要的东西附加到这个字段中,并创建函数来处理它,而不是调用模型的set/get。