Как получить одну модель в Backbone?
У меня есть модель Clock
в Backbone:
var Clock = Backbone.Model.extend({});
Я пытаюсь получить экземпляр, содержащий самую последнюю информацию из /clocks/123
. Некоторые вещи, которые я пробовал:
метод класса "class"
Clock.fetch(123)
// TypeError: Object function (){ ... } has no method 'fetch'
создание экземпляра, а затем вызов fetch
на нем:
c = new Clock({id: 123})
c.fetch()
// Error: A 'url' property or function must be specified
коллекция
Я попытался создать ресурс коллекции AllClocks
(хотя я не могу использовать эту вещь на странице):
var AllClocks = Backbone.Collection.extend({
model: Clock,
url: '/clocks/'
});
var allClocks = new AllClocks();
allClocks.fetch(123);
// returns everything from /clocks/
Как я могу получить один поддерживаемый API Clock?
Ответы
Ответ 1
Ваш второй подход - это подход, который я использовал. Попробуйте добавить следующую модель часов:
url : function() {
var base = 'clocks';
if (this.isNew()) return base;
return base + (base.charAt(base.length - 1) == '/' ? '' : '/') + this.id;
},
Этот подход предполагает, что вы внедрили контроллеры с хеш-сайтом в вашем URL-адресе, например http://www.mydomain.com/#clocks/123, но он должен работать, даже если вы еще нет.
Ответ 2
Попробуйте указать urlRoot в модели:
Из документов:
var Book = Backbone.Model.extend({urlRoot : '/books'});
var solaris = new Book({id: "1083-lem-solaris"});
solaris.fetch();
Ответ 3
Я лично рекомендую, следуя Документация по методу URL-модели Model #
model = new Model(id: 1)
view = new View(model: model)
collection = new Collection([model])
model.fetch()
в вашей коллекции не забудьте добавить URL-адрес коллекции:
url: "/models"
и в вашей функции инициализации View выполните:
this.model.bind("change", this.render)
таким образом, позвоночник выполнит запрос ajax, используя этот URL:
"/models/1"
ваша модель будет обновлена и визуализированный вид без изменения URL-адреса коллекции # или модели # urlRoot
Примечание:
извините, этот пример вышел в кофе script, но вы можете легко перевести его в js, добавив инструкции var
Ответ 4
var Person = Backbone.Model.extend({urlRoot : '/person/details'});
var myName = new Person({id: "12345"});
myName.fetch();
В результате вы делаете запрос Ajax на
URL http://[domainName]/person/details/id
и у вас ответ JSON.
Enjoiiii!!!
Ответ 5
... и сделайте это, если вы не хотите, чтобы конечная косая черта на модели urlRoot:
url : function() {
return this.urlRoot + this.id;
},
Ответ 6
Вероятно, вы должны получить доступ к объекту через коллекцию и постоянно хранить ее в коллекции. Вот как это сделать:
var AllClocks = Backbone.Collection.extend({
model: Clock,
url: '/clocks/'
});
var allClocks = new AllClocks();
my_clock = allClocks.add({id: 123});
my_clock.fetch()
Ответ 7
Я хочу использовать URL RESTful, но я не мог понять, почему "postId" не может быть добавлен в базовый url.
var PostModel = Backbone.Model.extend({
urlRoot: 'getBlogPost',
defaults: {
postTitle: "defaultTitle",
postTime: "1970-01-01",
postContent: "defaultContent",
postAuthor: "anonymous"
}
});
var post = new PostModel({
postId: 1
});
alert(post.url());
Тогда я знаю только после того, как я установил 'idAttribute' как 'postId' в Модели, могу ли я получить правильный url.
например:
var PostModel = Backbone.Model.extend({
idAttribute: 'postId',
urlRoot: 'getBlogPost',
defaults: {
postTitle: "defaultTitle",
postTime: "1970-01-01",
postContent: "defaultContent",
postAuthor: "anonymous"
}
});