javascript - Backbone 中的模型属性未定义?

标签 javascript backbone.js

我使用主干来构建我的客户端应用程序,我想做的是每次用户在事件上单击 .get_joke 时显示一个笑话:这是我的主干应用程序代码:

JokeModel = Backbone.Model.extend({
   url: '/jokes'
   initialize: function() {
      this.fetch();
  }
});

JokeView = Backbone.View.extend({
    template: _.template("<p><%= joke %></p>")
    events: {
      "click .get_joke" : "render"
  } 
    render: function() {
       var newJoke = new JokeModel;
       $(this.el).html(this.template(newJoke.toJSON()));
  }
});

newJokeView = new JokeView;

当我点击 .get_joke 时,问题是它不会将笑话渲染到 View 中,我知道模型已被获取,因为我检查了 console.log,但它说笑话尚未定义,但我没有知道问题出在哪里。谢谢

最佳答案

首先,你不能相信 console.log 对复杂对象的描述:

发生的情况是 joke.fetch() 是异步的,当您调用 jokeView.render() 时,模型仍未准备好。

您应该稍微修改一下您的架构,并为每个笑话分配一个适当的 View ,这样您就可以为每个笑话拥有一个在需要时负责显示它的 View 。

// code simplified an not tested
JokeModel = Backbone.Model.extend({
   url: '/jokes'
});

// This View is new and it is taking care only for the common event "click .get_joke"
// which is not related with any Joke in particular
// This View should be in charge of the JokesCollection 
// but I don't want to make things more complicate
JokeControls = Backbone.View.extend({
  events: {
    "click .get_joke" : "render"
  }, 

  getJoke: function(){
    var joke = new JokeModel();
    var view = new JokeView({ model: joke, el: this.$el.find( ".joke-wrapper" ) });
    joke.fetch();
  },
});


// This is the View that is related with unique Joke
JokeView = Backbone.View.extend({
    template: _.template("<p><%= joke %></p>"),

    initialize: function(){
      // see how it shows itself when the Model is ready
      this.model.on( "change", this.render, this );
    },

    render: function() {
       this.$el.html(this.template(this.model.toJSON()));
    }
});

// Activate the Joke Controls
newJokeControls = new JokeControls({ el: "#joke-controls" });

关于javascript - Backbone 中的模型属性未定义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12299411/

相关文章:

javascript - PHP:在网络浏览器中输出 system/Shell_exec 命令输出

javascript - 我可以将 2 个骨髓动画序列合并到一个语句中,并且仍然得到相同的结果吗?

javascript - Firebase.update 失败 : First argument contains a cyclic object value

javascript - #each helper 之外的 Handlebars 表达式

javascript - 有没有办法在插入html时触发事件?

javascript - 向下滚动按钮不起作用

javascript - Node JS undefined variable

javascript - 命名空间树 javascript 示例和语法解释

python - 有没有一种简单的方法可以将 Flask 服务器作为可执行文件分发?

javascript - Backbone & Slim PHP - Access-Control-Allow-Headers - 可以获取信息,不能发布信息?