6

以下では、内に SELECT リストを表示するために をLayout追加しています。その直後に、ui ハッシュを使用して、ビュー内のすべてのコントロールを有効または無効にしています。これは、 によって生成された SELECT では機能しません。CollectionViewonRendernew App.View.Categories

それはすべきですか?または、UI ハッシュはRegions内で機能しませんLayoutか?

App.View.UploadFile = Backbone.Marionette.Layout.extend({
    template: '#upload-file-template',
    regions:{
        category: 'td:nth-child(4)'
    },
    ui:{
        inputs: 'textarea, select, .save'
    },
    onRender: function(){
        this.category.show(
            new App.View.Categories({
                collection: App.collection.categories
            }) // generates the SELECT list
        );

        console.log(this.ui.inputs); // Length 2. Missing select.
        console.log(this.$('textarea, select, .save')); // Length 3

        this.ui.inputs.prop(
            'disabled', (this.model.get('upload_status')!='staged')
        );
    }
});
4

1 に答える 1

11

これは、期待どおりに機能するはずです。マリオネットのソースで問題となっているコードはこちら: https://github.com/marionettejs/backbone.marionette/blob/master/src/marionette.itemview.js#L49-L51

への呼び出しbindUIElements()は、ハッシュを jQuery セレクター オブジェクトに変換するものであり、メソッドが呼び出されるui直前に呼び出されます。onRender

エラーが表示されますか? それとも、セレクターは単に何も返さず、要素に影響を与えていませんか?


アップデート:

ああ!もちろん...私はあなたのコードに十分注意を払っていませんでした。サブビューを領域に追加する前にUI要素セレクターが発生するという点で、あなたは正しいです。これまでにこのような状況に遭遇したことはありません...しかし、これは修正/サポートしたいもののようです.

今のところ、私が提案できる最善の回避策は、'this.bindUIElements();' を呼び出すことです。onRender メソッドの最後に。これにより、UI 要素がセレクターに再バインドされます。

また、githubの問題リストに問題を追加して、これに対するより良い解決策を調べます. いつこれにたどり着くことができるかはわかりませんが、これで少なくとも修正すべきもののリストに載るでしょう。

于 2013-02-12T20:05:31.830 に答える