backbone.js – Backbone Marionette Layout的UI哈希问题

前端之家收集整理的这篇文章主要介绍了backbone.js – Backbone Marionette Layout的UI哈希问题前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
在下面的Layout中,我添加了一个CollectionView来显示onRender中的SELECT列表.紧接着,我使用ui哈希来启用或禁用视图中的所有控件.这不适用于新App.View.Categories生成的SELECT.

应该是?或者UI哈希不适用于布局中的区域?

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,.save')); // Length 3

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

解决方法

这应该按照您期望的方式工作. Marionette源中的代码在这里: https://github.com/marionettejs/backbone.marionette/blob/master/src/marionette.itemview.js#L49-L51

对bindUIElements()的调用将ui散列转换为jQuery选择器对象,并在调用onRender方法之前调用它.

你看到错误吗?或者选择器什么都不返回,对元素没有影响?

更新:

啊!当然……我没有足够关注你的代码.你是正确的,因为UI元素选择器发生在你将子视图添加到区域之前.我以前从未遇到过这种情况……但这似乎是我们想要修复/支持的事情.

目前,我建议的最好的解决方法调用’this.bindUIElements();’在你的onRender方法的最后.这将强制ui元素重新绑定到选择器.

我还要在github问题列表中添加一个问题,以便为此寻找更好的解决方案.我不知道什么时候能够达到这一目标,但这至少会将其列入要修复的事项列表中.

原文链接:https://www.f2er.com/js/149961.html

猜你在找的JavaScript相关文章