【问题标题】:understand Backbone set method and Model了解Backbone set方法和Model
【发布时间】:2013-02-14 17:21:31
【问题描述】:

大家好,我是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 函数。有没有人可以告诉我更多关于它的信息以帮助我理解?谢谢。

【问题讨论】:

  • 模型中的操作是错误的,您应该在模型中设置它们之前验证视图中的值
  • 我的朋友,我建议您首先阅读 OOP 在 JavaScript 中的工作原理。它与在 C# 和 Java 中的工作方式非常不同。
  • 我的朋友,约翰,谢谢。请为我推荐一些关于它的书。
  • 是的,你说得对,在 MVC 中,在视图中验证是对的。但是如果你使用了asp.net mvc,你会发现我们可以通过将属性添加到字段来实现验证功能。

标签: javascript backbone.js


【解决方案1】:

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

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

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

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

【讨论】:

    【解决方案2】:

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

    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 documentation 以进一步了解它们是如何工作的。希望这会有所帮助!

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

    【讨论】:

    • 感觉就像定义字典或动态键/值对集合。我们可以随时添加键或更改其元素的值。我说的对吗?
    • 集合只是模型的有序集合。当您需要使用大量模型时,它们会有所帮助。该信息实际上存储在“属性”属性上的每个模型中。您可以创建所有您喜欢的键并在任何给定时间更改它们的值。
    猜你喜欢
    • 2023-03-14
    • 2013-08-11
    • 2013-12-26
    • 1970-01-01
    • 2015-02-22
    • 1970-01-01
    • 2013-08-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多