骨架模型或永不改变的集合

时间:2015-10-02 16:12:38

标签: javascript backbone.js underscore.js

对不起,我的英文不好

我有一个应用程序,客户端部分是使用Underscore和Backbone开发的,服务器是laravel。 我有几个不同视图的数据库查询,这些咨询通过laravel进行,但作为json步骤,一些有13,000行和大约45,000个其他行,这些查询被缓存并完美地工作。 我希望我只能看到这些磋商和laravel siempe任何视图数据可用。 我有一个url router.js管理和呈现视图,但在每个视图中我需要这些数据时:

   initialize: function() {
     //This is a collection    
     var os = new OS();
     os.fetch()then(function(){
      //select2 example load drop down
     });
   }

1 个答案:

答案 0 :(得分:0)

您必须扩展Backbone以支持承诺。我使用Q作为promise库,但应该与任何其他lib类似(示例在es6中):

import {Collection} from 'backbone';

export default Collection.extend({
    fetch: function (options) {
        var deferred = Q.defer();

        options = options || {};

        var _success = options && options.success;
        var _error = options && options.error;

        options.success = (models, res, options) => {
          _success && _success(models, res, options);
          deferred.resolve([models, res, options]);
        };

        options.error = (models, res, options) => {
          _error && _error(models, res, options);
          deferred.reject([models, res, options]);
        };

        Collection.prototype.fetch.call(this, options);

        return deferred.promise;
    }
});

然后,当您定义集合时,您需要从此扩展。希望这会有所帮助: - )