gpt4 book ai didi

javascript - 我可以拥有一个 RequireJS 模块的多个实例吗?

转载 作者:数据小太阳 更新时间:2023-10-29 05:02:48 25 4
gpt4 key购买 nike

我显然缺少一些概念/理解,尤其是 javascript OO 基础知识!

我喜欢使用 RequireJS,我的网络应用程序现在看起来更像是一个结构化应用程序,而不是一堆疯狂的代码。

我只是在努力理解如何/如果以下是可能的。

我有一个模块作为基础数据服务模块,名为 dataservice_base,如下所示:

define(['dataservices/dataservice'], function (dataservice) {

// Private: Route URL
this.route = '/api/route-not-set/';
var setRoute = function (setRoute) {
this.route = setRoute;
return;
}

// Private: Return route with/without id
var routeUrl = function (route, id) {
console.log('** Setting route to: ' + route);
return route + (id || "")
}

// Private: Returns all entities for given route
getAllEntities = function (callbacks) {
return dataservice.ajaxRequest('get', routeUrl())
.done(callbacks.success)
.fail(callbacks.error)
};

getEntitiesById = function (id, callbacks) {
return dataservice.ajaxRequest('get', routeUrl(this.route, id))
.done(callbacks.success)
.fail(callbacks.error)
};

putEntity = function (id, data, callbacks) {
return dataservice.ajaxRequest('put', routeUrl(this.route, id), data)
.done(callbacks.success)
.fail(callbacks.error)
};

postEntity = function (data, callbacks) {
return dataservice.ajaxRequest('post', routeUrl(this.route), data)
.done(callbacks.success)
.fail(callbacks.error)
};

deleteEntity = function (id, data, callbacks) {
return dataservice.ajaxRequest('delete', routeUrl(this.route, id), data)
.done(callbacks.success)
.fail(callbacks.error)
};

// Public: Return public interface
return {
setRoute: setRoute,
getAllEntities: getAllEntities,
getEntitiesById: getEntitiesById,
putEntity: putEntity,
postEntity: postEntity,
deleteEntity: deleteEntity
};

});

如您所见,我引用的是 dataservices/dataservice,它实际上是核心 AJAX 调用机制(未显示,但实际上只是包装器中的基本 jQuery ajax 调用)。

我想做的是让这个基本数据服务模块按如下方式“实例化”(在另一个模块中 - 仅代码片段):

define(['dataservices/dataservice_base', 'dataservices/dataservice_base', 'dataservices/dataservice_base'], function (dataservice_profile, dataservice_qualifications, dataservice_subjects) {

// Set the service route(s)
dataservice_profile.setRoute('/api/profile/');
dataservice_qualifications.setRoute('/api/qualification/');
dataservice_subjects.setRoute('/api/subject/');

如您所见,我试图包含相同的 dataservice_base(如上定义)3 次,但在函数引用中,我试图通过命名变量来引用每个实例,即:

dataservice_profile、dataservice_qualifications、dataservice_subjects

.. 当然,我正在尝试能够为每个实例设置一个唯一的 setRoute 值,以便在模块中进一步使用.. 同时利用常见调用(get、puts、帖子等)。

显然我在这里遗漏了一些东西..但是非常感谢任何帮助我回到道路上的帮助!!

亲切的问候,大卫。

最佳答案

我认为您只需要包含一次依赖项并使用 new关键词。可能您需要重构,以便通用函数位于依赖模块中:

define(['dataservices/dataservice'], function (dataservice) {
var dataservice_profile = new dataservice();
var dataservice_qualifications = new dataservice();
var dataservice_subjects = new dataservice();

// Set the service route(s)
dataservice_profile.setRoute('/api/profile/');
dataservice_qualifications.setRoute('/api/qualification/');
dataservice_subjects.setRoute('/api/subject/');

// define needs to return something
return {
profile: dataservice_profile,
qualifications: dataservice_qualifications,
subjects: dataservice_subjects
};
});

关于javascript - 我可以拥有一个 RequireJS 模块的多个实例吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14217208/

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