gpt4 book ai didi

javascript - Backbone.js + Require.js : Collection URL set, 但出现错误 "Uncaught Error: A "url“必须指定属性或函数”

转载 作者:行者123 更新时间:2023-11-30 17:29:15 24 4
gpt4 key购买 nike

我目前正在为一个项目开发框架,该项目已拆分为 Web 客户端和服务器代码。客户端代码使用 require.js 和 backbone.js 的组合。我目前正在设置客户端/服务器通信,理想情况下我们希望能够使用主干的内置 .sync 功能(以及基于它构建的获取调用)。

但是,我遇到了一系列奇怪的错误。

当代码执行时,我在控制台中收到以下错误。 “ Uncaught Error :必须指定“url”属性或函数”

这些是我们 main.js 中的相关垫片

require.config({
paths: {
'jQueryBase': '../vendor/jquery-1.10.2/jquery-1.10.2',
'jQuery': '../vendor/jquery-ui-1.10.3/ui/jquery-ui',
'underscore': '../vendor/underscore/underscore',
'backbone': '../vendor/backbone/backbone',
'handlebars': '../vendor/handlebars/handlebars-v1.1.2 '
},
shim: {
'jQuery': {
exports: '$',
deps: ['jQueryBase']
},
'underscore': {
exports: '_'
},
'backbone': {
exports: 'Backbone',
deps: ['underscore', 'jQueryBase']
},
'handlebars': {
exports: 'Handlebars'
}
},
waitSeconds: 0
});

这是我们的 dogModel.js

define(['backbone'],
function (Backbone) var DogModel = Backbone.Model.extend({

});

return DogModel;
});

这是我们的 dogCollection.js

define {
('backbone',
'../models/dogModel'
J,
function (Backbone,
DogModel) {

var DogCollection = Backbone.Collection.extend({
model: DogModel,
url: '/dogs',
});

return DogCollection;
});

这是我们的 dogData.js

define(['../collections/dogCollection',
'../models/dogModel'
],
function (DogCollection,
DogModel) {

var dogDataModule = {};

dogDataModule.dogList = new DogCollection();

//this request works
$.ajax(
type: "GET",
dataType: "json",
url: "http://localhost:7001/SERVICES/dogs",
success: function (data) {
dogDataArray = data;

for (var i = 0; i < dogDataArray.length; i++) {
var dogData = dogDataArray[i];
var dogModel = new DogModel();
dogModel.set(dogData);
dogDataModule.dogList.add(dogModel);
}
}
});

//this request doesn't
dogDataModule.dogList.sync('read', DogCollection, {
success: function () {
alert("success ");
},
error: function () {
alert("failure ");
}
};

return dogDataModule;
});

我尝试将 URL 直接添加到同步请求的选项中,如下所示:

dogDataModule.dogList.sync('read', DogCollection, {
url: 'http://localhost:7001/SERVICES/dogs',
success: function () {
alert("success");
},
error: function () {
alert("failure "
};
});

但这一切所做的只是将错误更改为“Uncaught TypeError : Object function (){ returnparent.apply(这个,参数); } 没有方法“触发器””。

我还尝试在集合的 url 属性前添加“SERVICES/”和“../SERVICES/”,或者给出完整且明确的 URL 属性(包括 http://),但是这些都没有用。

谁能帮我弄清楚为什么我会看到这个错误?

最佳答案

首先,我认为您没有任何理由直接调用 dogList.sync(您可以使用 dogList.fetch,您当然需要这些功能fetch 为您提供服务器调用之外的服务。

现在,您的错误是因为您错误地使用了 sync。第二个参数是一个集合的实例,而不是一个类,如 fetch 的代码所示:

return this.sync('read', this, options);

所以在你的情况下,那就是:

dogDataModule.dogList.sync('read', dogDataModule.dogList

奖励:

错误 Uncaught TypeError : Object function (){ return parent.apply(this, arguments); } has no method 'trigger 是因为 Backbone 试图应用类的方法 trigger 而不是实例。 function (){ return parent.apply(this, arguments); 部分是您的类的构造函数,因此可以提示您正在发生的事情。

关于javascript - Backbone.js + Require.js : Collection URL set, 但出现错误 "Uncaught Error: A "url“必须指定属性或函数”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23528867/

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