1

我正在构建我的第一个 Backbone 应用程序,我对如何将 ID 传递给模型有点困惑。当我实例化模型时,我像这样传入 ID var user = new UserModel(id);。那时,id == 1initialize 该值在模型中的方法中仍然相同。当我在属性中使用该变量时url,它是未定义的。这是为什么?

// Filename: models/user/UserModel.js

define([
    'underscore',
    'backbone'
], function(_, Backbone) {

    var UserModel = Backbone.Model.extend({
        initialize: function(id) {
            console.log('modelID: ' + id); // Prints 'modelID: 1'
            this.set({'id': id});
        },
        // Sends GET request to http://[domain]/users/view/undefined
        url: 'users/view/' + this.id
    });

    return UserModel;

});
4

3 回答 3

1
  • Backbone 模型需要一个表示属性的对象作为其构造函数的第一个参数

    constructor/initialize new Model([attributes], [options])
    创建模型的实例时,可以传入属性的初始值,这些属性将在模型上设置。如果你定义了一个初始化函数,它将在模型创建时被调用。

  • 设置model.urlRoot将有助于构建您的 URL

    urlRoot model.urlRoot 或 model.urlRoot()
    如果您使用集合之外的模型,请指定 urlRoot,以启用默认 url 函数以根据模型 ID 生成 URL。“[urlRoot]/id”

  • 属性应该通过model.get

所以你可以将你的模型定义为

var UserModel = Backbone.Model.extend({
    urlRoot: '/users/view'
});

并将其实例化为var user = new UserModel({id: id});

于 2013-07-05T09:50:17.427 回答
1

这个有效:

var UserModel = Backbone.Model.extend({
        initialize: function(id) {
            console.log('modelID: ' + id); // Prints 'modelID: 1'
            this.set({'id': id});
       },
    // Sends GET request to http://[domain]/users/view/undefined
    url: function(){
        return "/users/view/"+this.get("id");
    }
   });
console.log(new UserModel("10").url())

http://jsfiddle.net/wyA9Q/2/

于 2013-07-05T09:38:06.953 回答
0
var userModel = new UserModel({id: 10});
userModel.fetch();

它应该工作:)

于 2013-07-05T09:51:16.560 回答