2013-07-05 3 views
1

Я строю свое первое приложение Backbone, и я немного смущен тем, как я передаю идентификатор в модель. Когда я создаю экземпляр модели, я передаю идентификатор, как этот var user = new UserModel(id);. В этот момент id == 1. В модели initialize значение остается неизменным. Когда я использую эту переменную в свойстве url, она не определена. Почему это?Доступ к идентификатору модели в backbone.js

// 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; 

}); 

ответ

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 "https://stackoverflow.com/users/view/"+this.get("id"); 
    } 
    }); 
console.log(new UserModel("10").url()) 

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

+0

Правильно, но как я могу заставить 'url' отправить запрос GET пользователям/представлению/1? –

+0

Прости, пропустил это. Вы можете использовать форму функции. –

+0

Это работает. Большое спасибо :) –

1
  • Backbone model ожидает, что объект, представляющий атрибуты в качестве первого аргумента в конструктор

    constructor/initialize new Model ([attributes], [options])
    При создании экземпляра модели вы можете передать начальные значения атрибутов, которые будут установлены в модели. Если вы определяете функцию инициализации, она будет вызываться при создании модели.

  • Установка model.urlRoot поможет построить ваши URL-адреса

    UrlRoot model.urlRoot или model.urlRoot()
    Укажите UrlRoot если вы с использованием модели за пределами коллекции, для включения функции url по умолчанию для создания URL-адресов на основе идентификатора модели. "[UrlRoot]/идентификатор"

  • Атрибуты должны быть доступны через model.get

Таким образом, вы могли бы определить вашу модель как

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

и создать его экземпляр в качестве var user = new UserModel({id: id});

+0

+1: Это тоже работает. Спасибо за объяснение :) –

0
var userModel = new UserModel({id: 10}); 
userModel.fetch(); 

It должен работать :)

Смежные вопросы