Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Backbone.js BackboneJS嵌套视图未渲染_Backbone.js - Fatal编程技术网

Backbone.js BackboneJS嵌套视图未渲染

Backbone.js BackboneJS嵌套视图未渲染,backbone.js,Backbone.js,我在lightbox中有backbonejs表单,html作为子视图。 对于从服务器加载的select数据,我有单独的模型和集合用于此select 这是模型的视图 return Backbone.View.extend({ model : optionModel, template : _.template(template), render : function () { this.$el.html(this.template(this.mode

我在lightbox中有backbonejs表单,html作为子视图。 对于从服务器加载的select数据,我有单独的模型和集合用于此select

这是模型的视图

return Backbone.View.extend({    
    model : optionModel,
    template : _.template(template),
    render : function () {
        this.$el.html(this.template(this.model.attributes));     
        return this;
    }
});
这是选项集合

return Backbone.Collection.extend({
    model : optionModel,
    getQuery : function(){
        //all my query codes
    }
});
选项集合视图渲染代码

我的父视图表单视图是我在渲染函数后创建的,在该函数内带有下划线ux.wrap

//<select>
var _selector = this.$el.find('#organization');

optionsView = new OptionsCollectionView({
    collection : optionsCollection,
    $el: _selector
});
optionsCollection.getQuery();
optionsView.render();
但是表单正在完美加载,选项集合查询成功,但html上没有任何更改,它不会更新。

假设getQuery使用jQuery或collection.fetch执行异步查询,问题或至少一个问题是您正在调用optionView.render以尽快,在查询结果返回之前


您可以抛出一个任意的5秒超时来验证这是否是这样的问题:setTimeoutfunction{optionView.render;},5*1000;,但正确的方法是从jQuery完成处理程序函数$.ajax{done:function{…}}或更好的主干同步事件处理程序调用render。只有通过主干集合fetch执行查询时,才会调用此函数:optionCollection.on'sync',function{…}

你的例子不完整。但是,考虑到回迁在主干和jQuery中通常是异步的,最明显的问题是optionsView.render将在optionCollection有机会完全加载集合之前运行。您可以通过侦听集合更新事件来解决此问题:

optionsView = new OptionsCollectionView({
    collection : optionsCollection,
   $el: _selector
});
optionsView.listenTo(optionsCollection, 'update', optionsView.render);
optionsCollection.getQuery();
您可以改为侦听同步事件,但侦听更新意味着对集合的本地更改也将触发更新视图

在将html元素数组传递到jQuery html函数时,呈现函数也存在问题

render: function() {

    var $el = this.$el;

    $el.empty();

    this.collection.each(function (optionModel) {

        var view = new OptionView({ model: optionModel });

        $el.append(view.render().$el);

    });

    return this;

}
但是,您最好使用标准的集合视图模式,或者类似主干的东西。集合视图-

这是什么。。?什么是_options查看阵列。。?如果它是一个javascript数组,谁告诉过你jQueryHTML方法接受数组。。?请提供
//<select>
var _selector = this.$el.find('#organization');

optionsView = new OptionsCollectionView({
    collection : optionsCollection,
    $el: _selector
});
optionsCollection.getQuery();
optionsView.render();
optionsView = new OptionsCollectionView({
    collection : optionsCollection,
   $el: _selector
});
optionsView.listenTo(optionsCollection, 'update', optionsView.render);
optionsCollection.getQuery();
render: function() {

    var $el = this.$el;

    $el.empty();

    this.collection.each(function (optionModel) {

        var view = new OptionView({ model: optionModel });

        $el.append(view.render().$el);

    });

    return this;

}