我们正在尝试修改现有的脚本,该脚本使用backbone.js从URL获取JSON并在屏幕上以定义的方式呈现它。
之前,该脚本指向外部PHP文件以从中获取JSON。
url: function () {
var ajaxValue = document.getElementById('ajax').value;
if(ajaxValue==0){
return this.options.apiBase + '/liveEvents.json';
} else {
var eventDate = document.getElementById('timestamp').value;
return this.options.apiBase + '/ajax.php?eventDate='+eventDate;
}
},
但是现在我们试图省略PHP的要求并纯粹使用Javascript获取JSON。为此,我们创建了一个JS函数fetch_data_set(),它返回正确的JSON
var ArrayMerge = array1.concat(array2,array3,array4);
return JSON.stringify(ArrayMerge);
所以我们的问题是,我们如何将这个JSON提供给骨干而不是使用外部URL。因为如果我们这样做(这显然是错误的):
url: function () {
var ajaxValue = document.getElementById('ajax').value;
if(ajaxValue==0){
var data_set = fetch_data_set();
return data_set;
}
},
抛出错误:错误:必须指定“url”属性或函数
答案 0 :(得分:0)
主键是扩展Backbone.sync
而不是url()方法,因此您可以使用这种方式在任何类型的模型中获取模型,并且您可以执行类似此链接的操作:
https://github.com/huffingtonpost/backbone-fixtures/blob/master/backbone-fixtures.js
答案 1 :(得分:0)
Backbone.Model包含一个sync()
函数,可以从url加载JSON数据。 sync()
使用url()
函数来确定应从何处获取数据。 (注意:sync()
是由save()
,fetch()
和destroy()
这里的诀窍是你应该停止覆盖url()
并直接重新实现sync()
,参见http://backbonejs.org/#Model-sync
以下是一个例子:
// specialized version to be used with a store.js - like object
sync: function(method, model, options) {
console.log("sync_to_store begin('"+method+"',...) called with ", arguments);
var when_deferred = when.defer();
var id = this.url();
if(method === "read") {
if(typeof id === 'undefined')
throw new Error("can't fetch without id !");
var data = model.store_.get(id);
// apply fetched data
model.set(data);
when_deferred.resolve( [model, undefined, options] );
}
else if(method === "create") {
// use Backbone id as server id
model.id = model.cid;
model.store_.set(id, model.attributes);
when_deferred.resolve( [model, undefined, options] );
}
else if(method === "update") {
if(typeof id === 'undefined')
throw new Error("can't update without id !");
model.store_.set(id, model.attributes);
when_deferred.resolve( [model, undefined, options] );
}
else if(method === "delete") {
if(typeof id === 'undefined')
throw new Error("can't delete without id !");
model.store_.set(id, undefined);
model.id = undefined;
when_deferred.resolve( [model, undefined, options] );
}
else {
// WAT ?
}
console.log("sync_to_store end - Current changes = ", model.changed_attributes());
return when_deferred.promise;
}
url()
作为id