0

所有,我是Backbone的新手。我正在尝试了解 Backone 的模型。特别是如何定义模型。到目前为止,我还没有看到关于如何为骨干定义模型的清晰或正式的方法。例如让我们看看帮助文档中的 set 方法。

model.set(属性,[选项])

在模型上设置属性的散列(一个或多个)。

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

    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功能。有没有人可以告诉我更多关于它的信息以帮助我理解?谢谢。

4

2 回答 2

1

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

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

您还可以覆盖一些模型方法来满足您的需求。例如,您可以更改urlRoot属性以告诉模型他应该从哪里获取数据。

骨干模型在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 文档以进一步了解它们是如何工作的。希望这可以帮助!

PD:在我的示例中,我一次设置一个属性,但您也可以发送一个属性散列以在一次调用中设置更多值。

于 2013-02-28T14:25:45.020 回答
1

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

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

您可以在初始化和默认值处定义字段,但不能定义自定义函数(您可以这样做,model.customFuntion()但我不建议这样做。

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

于 2013-02-28T14:41:00.307 回答