1

私は開発中の Backbone.js アプリを持っています (最初のアプリなので、これがばかげた質問であれば許してください)。ヘッダー ビュー (背景とタイトル) があります。レンダリングされたビュー/テンプレートに応じてタイトルを更新するモデルがあります。また、変更をリッスンし、ビューを再レンダリングして新しいタイトルを表示します。これは機能しますが、ビュー全体が再レンダリングされます (ビュー全体が再度レンダリングされる理由はわかっています) が、タイトルを更新する方法があるかどうか疑問に思っていますか?

見出しビュー:

var HeadingLabelView = Backbone.View.extend({
   el: '.heading-label-wrapper',
   initialize: function(){
      _.bindAll(this, "render");
      this.model.bind('change', this.render);
   },
   render: function() {
      var that = this;
      var template = _.template($("#heading-label-template").html(), that.model.toJSON());
      that.$el.html(template);
   }
});

ログイン ビュー:

var LoginView = Backbone.View.extend({
   el: '.page',
   render: function() {
      pageHeading.set({ name: "Log In" });
      var that = this;
      var template = _.template($("#login-template").html(), { });
      that.$el.html(template).trigger('create');
   }
});
4

1 に答える 1

1

モデルの name プロパティの変更イベントのみをリッスンすることでこれを行うことができると思います

var HeadingLabelView = Backbone.View.extend({
   el: '.heading-label-wrapper',
   initialize: function(){
      _.bindAll(this, "render");
      this.model.bind('change', this.render);
      this.model.bind('change:name', this.renderTitle);//listen to changes on the 'name' property
   },
   render: function() {
      var that = this;
      var template = _.template($("#heading-label-template").html(), that.model.toJSON());
      that.$el.html(template);
   },
   renderTitle: function(model,value,options) {
      //assuming your title tag can be located with 'heading-label-title' id, this will update the title only
      this.$("#heading-label-title").html(value);
   },
});

backbonejs.orgのビルドイン イベントのカタログを確認してください。モデルの特定のプロパティの変更のみをリッスンできるはずです。

于 2013-10-27T21:23:24.277 に答える