了解Backbone set方法和Model

时间:2013-02-28 13:33:26

标签: javascript backbone.js

全部,我是Backbone的新手。而我正试图理解Backone的模型。特别是如何定义模型。到目前为止,我没有看到关于如何为骨干定义模型的明确或正式的方法。 例如,让我们看一下帮助文档中的set方法。

  

设置

     

model.set(attributes,[options])

     

在模型上设置属性的哈希值(一个或多个)。

假设我们有一些如下代码。我认为set方法实际上是将一个javascript对象分配给Model。

    window.Employee = Backbone.Model.extend({

      validate:function(attrs){
        for(var key in attrs){
            if(attrs[key] == ''){
                return key + "can not be null";
            }
            if(key == 'age' && isNaN(attrs.age)){
                return "age is numeric";
            }
        }
      }
    });

    ....
    var attr = {}; // I can't not sure what is {} mean.
    $('#emp-form input,#emp-form select').each(function(){
        var input = $(this);//using jquery select input and select. and enumerate all of them.
        attr[input.attr('name')] = input.val();//I am not sure what does it means
    });
    if(employee.set(attr)){
            Employees.create(employee);
        }
    ....

在这个例子中,我没有看到我们在java类或c#类中可以看到的经典方法来定义类字段或方法。但只能看到validate功能。是否有人可以告诉我更多有关它的信息,以帮助我理解?感谢。

2 个答案:

答案 0 :(得分:1)

要在Backbone中定义模型,您必须扩展Backbone.Model对象。例如,如果您想创建一个新的用户模型,您可以编写如下内容:

var User = Backbone.Model.extend({})

您还可以覆盖某些模型方法以满足您的需求。例如,您可以更改urlRoot属性以告知模型他应该在何处获取数据。

Backbone模型在attributes属性中包含您的数据。您可以使用模型set方法更改这些属性,并且可以使用get方法读取存储在模型中的值。因此,如果您有一些用户可以输入信息的输入,例如使用他的姓名和电子邮件创建新用户,并且您有一个表单,其中包含两个文本输入。你可以这样做:

var user = new User;
user.set('name', $('#name').val());
user.set('email', $('#email').val());
attributes = {
  name: user.get('name'),
  email: user.get('email')
};
user.save(attributes);

有很多方法可以重新考虑这些代码以使其看起来更好,但它有助于了解如何使用这些方法。您应该查看Backbone documentation以了解它们的工作方式。希望这有帮助!

PD:在我的示例中,我将属性设置为时间,但您也可以发送一个属性哈希值以在一次调用中设置更多值。

答案 1 :(得分:1)

JS中的模型基本上是数据的包装器,具有CRUD和简单的验证功能。要正常工作,您需要使服务器函数与(ajax)一起工作,我认为本教程全部都是http://backbonetutorials.com/what-is-a-model/。该模型不是数据库,而是与您的应用程序服务器端一起使用。

如果您对数据有自定义操作(不只是添加/编辑/删除),您可以手动“设置()”数据,使用“onchange”事件并在需要时刷新视图。您甚至可以仅在特定字段上附加“onchange”事件,并在视图中创建自定义函数以处理每个特殊字段(用于验证或显示)。

您可以在initialize和defaults值中定义字段,但不能定义自定义函数(ofc,您可以model.customFuntion()但我不推荐它。

为了使其更具“clasical方式”,您需要使用其他Backbone函数http://backbonejs.org/#Collection-Underscore-Methods和Backbone.Collection。