Javascript 在下划线模板上对级别进行排序,确保按设置的顺序加载主干集合中的数据?

Javascript 在下划线模板上对级别进行排序,确保按设置的顺序加载主干集合中的数据?,javascript,jquery,backbone.js,underscore.js,underscore.js-templating,Javascript,Jquery,Backbone.js,Underscore.js,Underscore.js Templating,我有一个从数据库加载基本文本数据的下划线.JS模板。这些数据加载到两个div标记中。但我认为(我不确定,如果我错了,请纠正我),根据表主干首先得到什么,取决于这些div标记在中的显示顺序 所以(a),我想出了一个答案,我只是想知道天气与否这是最好的方法通过“链接”(如果这是正确的调用方式)成功调用,在相同的主干视图中,这将两个div加载到相同的下划线模板中。这是我目前的代码 var TextEditView = Backbone.View.extend({ inititalize:

我有一个从数据库加载基本文本数据的下划线.JS模板。这些数据加载到两个div标记中。但我认为(我不确定,如果我错了,请纠正我),根据表主干首先得到什么,取决于这些div标记在中的显示顺序

所以(a),我想出了一个答案,我只是想知道天气与否这是最好的方法通过“链接”(如果这是正确的调用方式)成功调用,在相同的主干视图中,这将两个div加载到相同的下划线模板中。这是我目前的代码

  var TextEditView = Backbone.View.extend({
    inititalize: function() {
        this.listenTo(this.BasicTextModel, "change", this.render);
    },
    el: $(".BasicTextTemplate"), //Template loader placeholder
    render: function() {
        var that = this;
        var AboutText = new TextAboutCollection(); //Get About page text
        var HomeText = new TextHomeCollection(); //Get Home page text

        HomeText.fetch({
            success: function(Text) {
                var GetHomeTxt = _.template( $('script.BasicText').html(), { Text: Text.toJSON() } ); //Load About text into template
                that.$el.append(GetHomeTxt);
                that.trigger('ChangeTxt', that);
                AboutText.fetch({
                    success: function(Text) {
                        var GetAboutTxt = _.template( $('script.BasicText').html(), { Text: Text.toJSON() } ); //Load About text into template
                        that.$el.append(GetAboutTxt);
                        that.trigger('ChangeTxt', that);
                    } //End of Success Call to AboutText
                }); //End of .fetch for AboutText
        }}); //End of Success & .fetch calls for HomeText
    } //End of render view function
}); //End of TextEditView
AboutText仅在hometext获取的成功调用完成后加载,对吗?即使我没有得到100%的支持,它现在看起来确实有效

(b)是否有一种简单的方法向每个div标记添加一个“level”或ID,以确保下划线按照我想要的顺序加载每个标记?还是我完全错了,应该将这两个集合加载到它们自己的视图中,指向它们自己的模板?如果是这样,我不明白模板的要点是什么?按照我现在拥有它们的方式,我只有一个重复使用过的模板

如果我错了,请纠正我


谢谢,

编辑的编辑:

model = new Model({_id:id})               
   var fetched = model.fetch();

  // wait for the model to be fetched
  $.when(fetched).then(function(){

     view = new View({model:model})                               
     app.content.show(view)     
  });


编辑:

这是关于评论的。 关于建筑规范,我认为你指的是骨干项目的组织(如果我错了,请纠正我)。如果是这样,我现在的做法就是按模块编写代码。模块基本上是:BackboneModel/集合、视图和下划线模板

架构:

   /
        main.js
        About/ 
        -- about.html <-- contains the underscore template
        -- aboutView.js
        -- aboutModel.js
        -- aboutCollection.js
        Menu/
        -- menu.html
        -- menuView.js
        -- menuModel.js
        -- menuCollection.js
一个很好的例子是


您的代码可以工作,但可读性不强,如果您必须添加一些fetch,则情况会更糟:

HomeText.fetch({
     AboutText.fetch({
         Module1Text.fetch({
             Module2Text.fetch({
             });
         });
      });
 });
这是电话。 要避免这种情况,请使用


值得注意的是,

@isthisloveCool,我对JQuery有点了解,但我从未遇到过看起来不错的承诺。我在看我的代码,并认为这不是构建代码的最佳方法。我明白了承诺的含义,运行一段代码,等待它完成,然后运行下一段。但是,承诺是最好的方法吗?主干还是下划线有更好的方法?谢谢,谢谢,我会调查的。我看到很多人都在谈论AMD作为一种建立网站的方法,我打算看看它。@isthisloveCool,好的,谢谢你的更新,但我不确定我的解释是否正确。我的意思是如何在.promise()中编写代码,并在视图的成功调用中运行我需要的代码。我已经研究了.promise()并大致了解了它,但不确定(而且似乎找不到一个好的例子)如何用Backbone.view实现它。谢谢很多感谢-我已经用
code
实现了它。当
code
时,代码看起来好多了,而且更容易阅读。非常感谢-很抱歉,我似乎无法给出你的答案,我需要更多的代表:(没关系,最好是你发现了)。此外,我忘了告诉您,有一种方法可以检查何时提取了数据,回调也可以满足您的需要。
HomeText.fetch({
     AboutText.fetch({
         Module1Text.fetch({
             Module2Text.fetch({
             });
         });
      });
 });