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,我正在学习backbone.js。在本文中,他们通过扩展backbone.Model来定义特定的主干模型 例如: Person = Backbone.Model.extend({ initialize: function(){ alert("Welcome to this world"); } }); 我对一个基本点有点困惑:在主干中,您是否提前定义了模型的属性?例如,您能否定义一个只能有两个字段的人员模型:姓名和年龄 根据我创建Java或C类的经验,我希望您能

我正在学习backbone.js。在本文中,他们通过扩展backbone.Model来定义特定的主干模型

例如:

Person = Backbone.Model.extend({
    initialize: function(){
        alert("Welcome to this world");
    }
});
我对一个基本点有点困惑:在主干中,您是否提前定义了模型的属性?例如,您能否定义一个只能有两个字段的人员模型:姓名和年龄

根据我创建Java或C类的经验,我希望您能够以与定义对象相关字段大致相同的方式定义与模型相关联的属性。但backbone.js似乎不是这样工作的。您似乎通过在实例化期间设置与模型关联的属性来定义这些属性。例如,通过实例化实例并设置年龄和姓名字段,可以在人员模型中创建年龄和姓名字段。var person=新人{姓名:托马斯,年龄:67};对吗


与此相关的是,你能用javascript对象做到这一点吗?我知道javascript是解释的而不是编译的,所以没有编译时检查类中哪些字段被设置/访问,但我认为运行时检查是可能的。

主干鼓励使用其setter和getter函数.set和.get。这样做有一些好处,每次使用setter时,如果属性发生更改。通过这种方式,视图或其他模型或任何可以侦听模型并对属性更改作出反应的对象

   var Car = Backbone.Model.extend({});

   var myCar = new Car({tires:0});

   myCar.listenTo(myCar, 'change:tires', function(){
       console.log('Now with '+myCar.get('tires'));
   }, this);

   myCar.set({tires: 4}); //logs "Now with 4"
要直接访问那些不推荐的属性,可以访问模型的attributes对象。当然,您仍然可以通过使用model.myAttribute=myValue或类似的东西在该方法之外设置自己的属性,但这不会触发事件

  myCar.tires = 3;
  myCar.get('tires'); // still 4
主干属性在几个不同的时间实例化。主要方法是.set方法,它接受一个JSON对象,迭代键并保存值。此函数用于实例化新模型、与服务器同步/获取以及手动调用它。要处理实例化值,只需向initialize方法添加代码,要处理服务器响应,则向模型的解析方法添加代码


如果要为某些特性设置默认值,可以通过为模型定义默认对象来实现。无论如何,我喜欢不用手动设置属性,这样如果我想调整API,更改就会顺利通过。如果不允许使用某些属性,可以始终从initialize方法的属性中删除它们。

主干鼓励使用其setter和getter函数.set和.get。这样做有一些好处,每次使用setter时,如果属性发生更改。通过这种方式,视图或其他模型或任何可以侦听模型并对属性更改作出反应的对象

   var Car = Backbone.Model.extend({});

   var myCar = new Car({tires:0});

   myCar.listenTo(myCar, 'change:tires', function(){
       console.log('Now with '+myCar.get('tires'));
   }, this);

   myCar.set({tires: 4}); //logs "Now with 4"
要直接访问那些不推荐的属性,可以访问模型的attributes对象。当然,您仍然可以通过使用model.myAttribute=myValue或类似的东西在该方法之外设置自己的属性,但这不会触发事件

  myCar.tires = 3;
  myCar.get('tires'); // still 4
主干属性在几个不同的时间实例化。主要方法是.set方法,它接受一个JSON对象,迭代键并保存值。此函数用于实例化新模型、与服务器同步/获取以及手动调用它。要处理实例化值,只需向initialize方法添加代码,要处理服务器响应,则向模型的解析方法添加代码


如果要为某些特性设置默认值,可以通过为模型定义默认对象来实现。无论如何,我喜欢不用手动设置属性,这样如果我想调整API,更改就会顺利通过。如果不允许使用某些属性,则始终可以在initialize方法中将其从属性中删除。

如果需要设置一些默认值,则只能将属性定义为模型定义的一部分:

Person = Backbone.Model.extend({
    defaults: {
        "species": "homo sapiens"
    },

    initialize: function () {
        alert("Welcome to this world");
    }
});
除此之外,属性将只是您放入模型中的任何对象的属性。下面是一个例子:

var examplePerson =  new Person({ firstName: "Johnny", lastName: "Smith", age: 30 });

现在,firstName、lastName、age和species是模型实例的属性。如果要对设置的值进行验证,请提供主干方法的实现。

如果需要设置一些默认值,则只能将属性定义为模型定义的一部分:

Person = Backbone.Model.extend({
    defaults: {
        "species": "homo sapiens"
    },

    initialize: function () {
        alert("Welcome to this world");
    }
});
除此之外,属性将只是您放入模型中的任何对象的属性。下面是一个例子:

var examplePerson =  new Person({ firstName: "Johnny", lastName: "Smith", age: 30 });
现在,firstName、lastName、age和species是模型实例的属性。如果要对设置的值进行验证,请提供主干方法的实现