Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/67.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 主干网.木偶模板异步加载_Backbone.js_Jquery Templates_Marionette_Backbone Events_Backbone Views - Fatal编程技术网

Backbone.js 主干网.木偶模板异步加载

Backbone.js 主干网.木偶模板异步加载,backbone.js,jquery-templates,marionette,backbone-events,backbone-views,Backbone.js,Jquery Templates,Marionette,Backbone Events,Backbone Views,我们正在为我们的项目使用主干网和主干网。目前,我们正在服务器上存储视图的所有模板,并已覆盖loadTemplate调用以异步加载它们 但是,当我们使用布局视图时,由于该视图的模板是异步加载的,因此我们似乎无法立即访问布局的区域。以下是一个例子: var layoutView = new Layout(); var itemView = new ItemView(); App.containerRegion.show(layoutView); layoutView.mainRegion.show

我们正在为我们的项目使用主干网和主干网。目前,我们正在服务器上存储视图的所有模板,并已覆盖loadTemplate调用以异步加载它们

但是,当我们使用布局视图时,由于该视图的模板是异步加载的,因此我们似乎无法立即访问布局的区域。以下是一个例子:

var layoutView = new Layout();
var itemView = new ItemView();

App.containerRegion.show(layoutView);
layoutView.mainRegion.show(itemView); <---- This is where the issue would occur.
var layoutView=new Layout();
var itemView=new itemView();
App.containerRegion.show(布局视图);

layoutView.mainRegion.show(itemView) 我认为您必须重写Marionette.ItemView的渲染函数,在该函数中,您首先加载模板数据,然后在成功加载模板时渲染视图:

  render: function(){          
    if (this.beforeRender){ this.beforeRender(); }

    this.trigger("before:render", this);
    this.trigger("item:before:render", this);

    var data = this.serializeData();
    var templateSrc = this.getTemplate();

    $.ajax({
      url: 'templatesFolder/' + templateSrc,
      success: _bind(function(template){
         var html = Marionette.Renderer.render(template, data);
         this.$el.html(html);

         if (this.onRender){ this.onRender(); }
         this.trigger("render", this);
         this.trigger("item:rendered", this);
      }, this)
    })

    return this;
  },
你需要抓住插件。它完全是为了做你想做的

但是,您需要知道,从服务器异步获取模板会影响性能。如果屏幕上没有什么东西告诉用户应用程序正在幕后工作(如spinner graphic),那么这样做的网络延迟可能会导致用户认为应用程序没有响应

最好一次获取尽可能多的模板,以减少网络延迟和传输。完全这样做是没有必要的