gpt4 book ai didi

javascript - Backbone js 根据多个 URL 返回的结果构建集合

转载 作者:行者123 更新时间:2023-12-01 03:06:05 25 4
gpt4 key购买 nike

我有一个如下所示的模型:

var BasicModel = Backbone.Model.extend({
defaults: {
a: '',
b: '',
c: '',
d: '',
e: ''
},
idAttribute: "f",
parse: function (data) {
return data;
},
initialize: function () {
console.log('Intialized');
},
constructor: function (attributes, options) {
Backbone.Model.apply(this, arguments);
}
});

像这样的集合:

var BasicCollection = Backbone.Collection.extend({
model: BasicModel,
url: urlCode
});

var ACollection = BasicCollection.extend({
parse: function (data) {
return data.a.b.c.d;
}
});

var aCollection = new ACollection ();

像这样的 View :

var BasicView = Backbone.View.extend({

tagName: 'tr',

template: _.template($('#basic-status-template').html()),

render: function () {
this.$el.html(this.template(this.model.attributes));
return this;
}

});

var BasicsView = Backbone.View.extend({

initialize: function () {
this.render();
},

});

这是集合获取的样子(构建 View ):

aCollection.fetch({
success: function () {

// View

var aView = BasicsView.extend({
el: '#foobar #table-body',

render: function () {
this.$el.html('');
aCollection.each(function (model) {
var x = new BasicView({
model: model
});
this.$el.append(x.render().el);
}.bind(this));

return this;
}

});

var app = new aView();
}
});

但是现在,当我尝试向 View 将填充的表添加另一条详细信息时,我遇到了一个问题。其中一列需要来自单独 URL 的数据。但我仍然希望它成为同一过程的一部分。

有没有办法从两个 URL 的结果形成一个集合。 (即 a、b、d 和 e 来自 URL 1,c 来自 URL 2)?

这样我需要更改的只是模板,并且它应该全部工作相同。而不必同时更改大量其他内容。

谢谢。

最佳答案

你有几个选择:

  1. 更新端点以发送所需数据。这是正确的做法。理想情况下,集合应具有单一端点

  2. 在提取集合之前发送单独的 AJAX 请求从一个 URL 获取数据,然后在集合的 parse 方法中将数据添加到从集合的 URL 获取的响应中

  3. 执行以下操作:

    $.when(collection.fetch(), collection.fetchExtraData())
    .done(()=> { /* create view here */ });

    fetchExtraData 这里是一个自定义函数,它发送额外的请求并使用数据正确更新集合。这样两个请求就会同时发送。您需要确保parse不会重置来自其他端点的数据。

关于javascript - Backbone js 根据多个 URL 返回的结果构建集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46175846/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com