如何管理骨干应用

How do I manage a Backbone app?

本文关键字:应用 管理 何管理      更新时间:2023-09-26

我试图围绕Backbone进行思考,更具体地说,应用程序在其整个生命周期中的流动方式。不幸的是,在我的工作中,我无法访问(或就此而言(我们的API是如何构建的。我们有来自不同时间段的许多不同的电话,结构疯狂不一致。

覆盖获取或同步不是标准化返回的问题,但我遇到的(在我深入研究 Backbone 应用程序的一开始(是如何布局实际代码。

这是我的真实世界示例。这个页面是非关键的,我正在尝试用Backbone重写它。以下是流程:

  1. 页面从调用加载流派类型的列表
  2. 单击流派类型会根据流派类型加载子流派
  3. (子流派类型需要流派代码作为参数(
  4. 单击子类型类型会加载具有该条件的所有产品。

我可以走得很远,但在某些时候我觉得代码被破坏了 - 或者感觉不自然。就像我把东西塞进去一样。

所以我的官方问题是:如何管理骨干应用程序?

以下是我的流程摘要:

我创建了一个全局命名空间

,应该
var App = App || {};

好的,让我们从主应用程序视图开始,如所有示例所示:

App.MainView = Backbone.View.extend({
   //this loads the outer stuff
   //and creates an instance of the Genre View
});

好吧,非常简单,我将需要一个流派模型、集合和视图(这也适用于子流派(

App.Genre = Backbone.Model.extend();
App.Genres = Backbone.Collection.extend({
  url: 'returns a list of genres',
  model: App.Genre,
  initialize: function() {
    this.fetch();
  },
  fetch: function() {
    var self = this;
    $.ajax({
      url: this.url,
      success: function(response) {
        **format return**
        self.add(formattedArrayOfModels);
      }
    });
  }
});

现在来看观点,令人困惑的部分

App.GenreView = Backbone.View.extend({
  el: 'element',//easy enough
  tmpl: 'my handlebars template',//implementing handlebars...no problem
  initialize: function() {
    //this produces a collection full of genres
    this.genreList = new App.Genres();
    this.genreList.on('add', _.bind(this.render, this));
  },
  render: function() {
    //rendering not a problem, pretty straight forward
  }
});

直到这里,我没有问题。流派列表加载,我们很好。所以,现在当用户点击一个流派时,我希望它加载一个子流派

events: {
  'click a': 'getSubGenres'
},
getSubGenres: function(e) {
}

这是我的问题。在getSubGenres中,我是否将其保留在本地?

var subGenre = new App.SubGenreView();

还是我应该将其作为流派视图的一部分?

this.subGenre = new App.SubGenreView();

我是否应该以某种方式将其放在父对象中,以便其他视图可以访问它?我该如何控制这样的事情?

如果我已经有一个子流派的集合,我该如何使用加载的集合(而不是另一个 ajax 调用(。

这是您将使用的方法吗?

回答之前的几件事,首先:fetch 函数不需要$ajax调用,因为它是它的工作,因此,您可以在 fetch 中立即评估error:function(){}success:function(){},但这假设 URL 设置正确。第二:在我的主干键盘头斗争中对我有很大帮助的一件事是Addy Osmani Backbone Fundamentals,其中包含一个非常丰富的PDF格式教程。

现在回到问题:根据我的经验,你最需要"这个",所以习惯它是一个很好的兔子,而且如果正确实施,有一些东西可以解决很多这些问题: 骨干布局管理器

无论如何,在你的情况下,放置子视图的位置的决定完全是一个设计决定,并且在很大程度上取决于你如何构建页面和文件。

关于如何使用预加载的"集合":我真的不明白,因为您所说的集合包含所有子类型,因此通常即使视图更改为某个流派视图,它也不会更改,您仍然可以使用它。

但我所说的一切,都是相对于你如何构建文件,我做了一个应用程序.js和一个路由器.js还有很多其他文件,但主要工作总是在主要的两个上,所以基本上我总是可以访问所有内容。

我希望这回答了你的问题