Pergunta

No meu controlador estou passando um parâmetro chamado 'url' para um modo de exibição.Este é transmitido com sucesso para a função de inicialização.Seguinte, quando eu criar o meu modelo eu gostaria de passar o mesmo parâmetro para o modelo para usar como rooturl.

Abaixo está o que eu tentei mas eu tenho a seguinte mensagem de erro:

A "url" property or function must be specified 

Este parece ser o parâmetro não está sendo passado para o modelo (indefinido) ou eu não estou chamando-o corretamente no modelo. O que estou eu fazendo de errado aqui?

Nota: console.log(opções.url) na função de inicialização vista confirma o parâmetro é passado com êxito a partir do controlador para o modo de exibição, as questões da vista para o modelo onde é indefinido.

Controlador:

var myview = new NewView({
           url:"api/"
       })**

Visão:

  var myview = Backbone.Marionette.ItemView.extend({

        initialize: function (options) {
            this.url = options.url;
            this.model.fetch();
        },


    model: new myModel({
            url: this.url
        }),

myModel:

var myModel = Backbone.Model.extend({
  urlRoot: function(){ return this.get('url') }

});
Foi útil?

Solução

Você está tentando buscar o seu modelo com um vazio url.

Quando você chamar:

initialize: function (options) {
  this.url = options.url;
  this.model.fetch();
}

fetch aqui, você não tem a url do modelo.Então, o que você poderia fazer:

initialize: function (options) {
  this.url = options.url;
  this.model.set({url: this.url});
  this.model.fetch();
}

Outras dicas

Ao escrever

model: new myModel({
        url: this.url
    }),

o modo de exibição ainda não está inicializado

Você pode instanciar o modelo na vista do método de inicialização

initialize: function (options) {
        this.url = options.url;
        this.model = new myModel({
            url: this.url
        })
        this.model.fetch();
    },
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top