Tenho um Clock
modelo no Backbone:
var Clock = Backbone.Model.extend({});
Estou tentando obter uma instância disso que contém as informações mais recentes /clocks/123
. Algumas coisas que tentei:
um método de nível de "classe"
Clock.fetch(123)
// TypeError: Object function (){ ... } has no method 'fetch'
criar uma instância e, em seguida, chamá fetch
-la:
c = new Clock({id: 123})
c.fetch()
// Error: A 'url' property or function must be specified
uma coleção
Tentei criar um AllClocks
recurso de coleção (embora não tenha uso para tal coisa na página):
var AllClocks = Backbone.Collection.extend({
model: Clock,
url: '/clocks/'
});
var allClocks = new AllClocks();
allClocks.fetch(123);
// returns everything from /clocks/
Como faço para obter apenas um relógio apoiado por API?
javascript
model-view-controller
rest
backbone.js
James A. Rosen
fonte
fonte
Respostas:
Sua segunda abordagem é a abordagem que usei. Experimente adicionar o seguinte ao seu modelo de Relógio:
Esta abordagem assume que você implementou controladores com o hashbang em sua URL, como, http://www.mydomain.com/#clocks/123 , mas deve funcionar mesmo se você ainda não o fez.
fonte
[collection.url]/[id]
.Tente especificar urlRoot no modelo:
Dos documentos:
fonte
currentBook.set('id', 13423, {silent:true})
. Isso também funciona, mas não sei por quê:currentBook.id = 13423
model.id
é essencialmente sinônimo demodel.attributes.id
. Se você chamarmodel.set('id')
, o Backbone será definidomodel.id
para o que você especificou. Emodel.id
é o que é usado ao criar a URL específica do modelo.Eu pessoalmente recomendo, seguindo a documentação do método Model # url
em sua coleção, lembre-se de adicionar o url da coleção:
e na função de inicialização do seu View faça:
desta forma, o backbone fará uma solicitação ajax usando este url:
seu modelo será atualizado e a visualização renderizada, sem modificar Collection # url ou Model # urlRoot
observação: desculpe, este exemplo saiu em script de café, mas você pode facilmente traduzi-lo para js adicionando instruções var
fonte
{}
dentro do()
's para os objetos passados e opcional e;
no final das linhasComo resultado, você faz uma solicitação Ajax no
e você tem a resposta JSON de volta.
Enjoiiii !!!
fonte
... e faça isso se você não quiser a barra final no modelo urlRoot:
fonte
Você provavelmente deve acessar o objeto por meio de uma coleção e mantê-lo na coleção o tempo todo. É assim que se faz:
fonte
Quero usar o url RESTful, mas não consigo entender por que 'postId' não pode ser adicionado ao url base.
Então eu sei que só depois de definir 'idAttribute' como 'postId' em Model, posso obter o url correto. como isso:
fonte