Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/420.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
Javascript 向现有模型(backbone.js)添加更多数据_Javascript_Jquery_Backbone.js_Underscore.js - Fatal编程技术网

Javascript 向现有模型(backbone.js)添加更多数据

Javascript 向现有模型(backbone.js)添加更多数据,javascript,jquery,backbone.js,underscore.js,Javascript,Jquery,Backbone.js,Underscore.js,集合的初始fetchdone将检索每个模型的部分详细信息。当用户单击网页上的某个项目时,需要检索该项目的更多详细信息并将其显示给用户 用于返回该项初始提取中丢失的附加数据的API函数已实现(/API/full_details) 问题:我应该如何检索附加的并将其附加到现有模型中?我的理解是,如果我执行model.fetch(),该模型中的现有数据将消失。我认为,如果模型的fetch()有一个选项{add:true},比如集合的fetch(),这就是我在这里需要的 型号 Listing = Back

集合的初始
fetch
done将检索每个模型的部分详细信息。当用户单击网页上的某个项目时,需要检索该项目的更多详细信息并将其显示给用户

用于返回该项初始提取中丢失的附加数据的API函数已实现(
/API/full_details

问题:我应该如何检索附加的并将其附加到现有模型中?我的理解是,如果我执行
model.fetch()
,该模型中的现有数据将消失。我认为,如果模型的
fetch()
有一个选项
{add:true}
,比如集合的
fetch()
,这就是我在这里需要的

型号

Listing = Backbone.Model.extend({
});
收藏

ListingCollection = Backbone.Collection.extend({
    model: Listing,
    url: '/api/search'
});
查看

ListingListView = Backbone.View.extend({ ........ });

ListingView = Backbone.View.extend({
    events: {
        'click': 'getFullDetails'
    },

    getFullDetails: function() {
        // What should I do here?
    }
})
路由器中的某个地方

this.listingList = new ListingCollection();
var self = this;
this.listingList.fetch({
    data: {some:data},
    processData: true,
    success: function() {   
        self.listingListView = new ListingListView({ collection: self.listingListNew });
        self.listingListView.render();
    }

对此,我可能会使用两种不同的模型:

  • 您现有的模型将成为
    ListingSummary
    ,您的集合将包含
    ListingSummary
    实例
  • 为完整版本创建新的
    列表
    (或
    列表完整
    )模型。这将得到
    /api/full_details
    的支持
  • 您可以使用摘要模型中已有的信息初始化完整模型:

    var ListingSummary = Backbone.Model.extend({
        //...
        getListing: function() {
            if(!this._full) {
                this._full = new Listing({ summary: this });
                this._full.fetch();
            }
            return this._full;
        }
    });
    
    然后在完整版本中:

    var Listing = Backbone.Model.extend({
        initialize: function() {
            if(this.options.summary) {
                // Copy the interesting bits from this.options.summary.attributes
                // to this.attributes, possibly using this.set()
            }
        }
    });
    
    然后,完整列表视图可以检查其
    列表
    是否已完全加载:如果已加载,则视图可以显示完整列表,但如果模型尚未全部加载,该视图可以显示存在的内容,并在等待服务器响应完整的
    列表
    模型时抛出一个旋转器/加载器/旋转器/任何你称之为它的东西;与往常一样,您的视图将列出模型中的事件,以了解何时一切就绪

    您可以对现有的
    列表
    模型执行相同的操作,只需启动一个原始的
    $。ajax
    调用,而不使用单独的模型:

    loadFullModel: function() {
        if(this._fullyLoaded)
            return;
        // Call out to /api/full_details ...
        var _this = this;
        $.ajax({
            //...
            success: function(data) {
                // Do things with data...
                _this._fully_loaded = true;
                // Trigger your event...
            }
        });
    }