8

我想使用 Backbone 实现一个简单的搜索页面。它不是单页应用程序,但仍想使用 Backbone 构建我的 JavaScript 代码。搜索页面由搜索表单和搜索结果组成。搜索是通过 AJAX 完成的,并且必须保存在历史记录中。从历史记录加载页面时,应将搜索查询参数加载到表单中。搜索表单和搜索结果可以实现为 Backbone.View 的。但是,我在将它们粘合在一起时遇到了问题。

我认为我需要某种控制器。有一个 Backbone.Router,但它是正确的地方吗?AJAX 调用应该放在哪里?

欢迎对此类页面的结构提出任何建议。

4

1 回答 1

10

您可以创建一个SearchModel. SearchModel会有一个方法,比如:“performSearch(string)”,它会触发你的 ajax 调用。当调用返回时,模型可以执行以下操作:

this.set("searchResults", ajaxResult)

并且您的视图可以绑定到模型的该属性:

// SearchResultsView
Backbone.View.extend({
    initialize: function() {
        this.model.on("change:searchResults", this.displayResults, this);
    },
    displayResults: function(model, results) {
        // do whatever...
    }
});

示例搜索表单视图以供参考:

Backbone.View.extend({
   events: {
      "submit": "formSubmitted"
   },
   formSubmitted: function(e) {
      this.model.performSearch(e.target.value);
   }
});

SearchModel供参考的例子:

Backbone.Model.extend({
   performSearch: function(string) {
      // fire your ajax request.  provide a bound
      // _searchComplete as the callback
   },
   _searchComplete: function(results) {
     this.set("searchResults", results);
   }
});
于 2012-05-21T04:58:02.373 回答