1

Backbone.Marionette.js アプリケーションへの Etch.js の統合に直面したことのある人はいますか?

保存イベントのバインドに問題があります。これは私のマリオネット ビューのコードです。

MyApp.module('Views', function(Views, App, Backbone, Marionette, $, _) {

    Views.DetailsView = Marionette.ItemView.extend({

        template: '#details',

        initialize: function(options) {
            _.bindAll(this.model, 'save'); // I think the problem is related to the binding
            this.model.bind('save', this.model.save);
        },

        events: {
            'mousedown .editable': 'editableClick'
        },

        editableClick: etch.editableInit
    });
});

私のテンプレートには、次のようなものがあります。

<div id="detail-expanded">
     <p>Description: <span class="editable">{{ description }}</span></p>
</div>

プラグインは正しくロードされています。フィールドをクリックすると、Etch ボタン バーが表示され、編集可能になった要素のコンテンツを編集できます。保存ボタンをクリックすると、実際にモデルの save() をトリガーできます。方法。

問題は、提出されたモデルが元のモデルであり、フィールドに編集を加えていないことです。それは拘束力のある問題だと思います、何かアイデアはありますか?

いつもありがとうございます。

4

2 に答える 2

1

したがって、ここでの問題はマリオネットとは関係ありません。編集可能なフィールドからモデルへのデータの移動を etch が処理しないということです。ドキュメントでそれについてもっと明確にする必要があります。あなたがしたいことは、あなたのためにこれを行う保存機能をビューに作成することです:

Views.DetailsView = Marionette.ItemView.extend({

    template: '#details',

    initialize: function(options) {
        _.bindAll(this, 'save');
        this.model.bind('save', this.save);
    },

    events: {
        'mousedown .editable': 'editableClick'
    },

    editableClick: etch.editableInit,

    save: function() {
      // populate model attrs from dom
      var title = this.$('.title').text();
      var body = this.$('.body').text();


      this.model.save({title: title, body: body});
    }
});

混乱させて申し訳ありません。この点で、ドキュメントがどのように誤解を招くかがわかります。

于 2012-12-04T20:48:47.747 に答える
0

私はあなたが望むものだと信じています

_.bindAll(this, 'save');

それ以外の

_.bindAll(this.model, 'save');
于 2012-12-04T18:39:10.323 に答える