- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在 AngularJS Controller 中,我定义了以下内容:
app.controller('contentTypeController', ['$scope', '$log', 'abstractDataFactory', 'customFunctions',
// the abstract data factory accepts controller type parameters for RESTful CRUD
function ($scope, $log, abstractDataFactory, customFunctions) {
var dataFactory = new abstractDataFactory("/odata/ContentType");
var crudServiceBaseUrl = "/odata/ContentType";
var dataSource = new kendo.data.DataSource({
type: "odata",
transport: {
read:
function (options) {
var odataParams = kendo.data.transports["odata"].parameterMap(options.data, "read");
dataFactory.getList(odataParams)
.success(function (result) {
options.success(result);
})
.error (function (error) {
console.log("data error");
});
...
这一切都运行良好。但是,我不想重新定义 dataSource
在另一个 Controller 中,对于这个特定的数据集 - ContentType,并希望将其抽象出来。
结果,我创建了一个新的 dataSourceFactory
。我并不完全清楚实现这一点的最佳策略是什么。
我想我想要新建 dataSourceFactory
就像我做abstractDataFactory
一样来自 Controller ,并将这些参数传递到abstractDataFactory
来自dataSourceFactory
.
注入(inject)新的dataSourceFactory
后进入我的 Controller ,它将返回各种数据源,具体取决于方法调用:
var dataSourceFactory = new dataSourceFactory("/odata/ContentType");
var dataSource = dataSourceFactory.contentType(); // .userDetails(), .someOtherData()...
据我了解,Angular 工厂返回函数,所以我不认为这正是我正在寻找的。
到目前为止,这是我的非工作实现:
Controller :
app.controller('contentTypeController', ['$scope', '$log', 'dataSourceFactory', 'customFunctions',
function ($scope, $log, dataSourceFactory, customFunctions) {
var dataSourceFactory = new dataSourceFactory("/odata/ContentType");
var dataSource = dataSourceFactory.contentTypes(); // returns a function, rather than kendo.data.DataSource object
...
数据源工厂:
// factory to return datasources
app.factory('dataSourceFactory', function (abstractDataFactory) {
function dataSourceFactory(odataUrlBase) {
this.dataFactory = new abstractDataFactory(odataUrlBase);
}
dataSourceFactory.prototype = {
contentTypes: function () {
new kendo.data.DataSource({
type: "odata",
transport: {
read:
function (options) {
var odataParams = kendo.data.transports["odata"].parameterMap(options.data, "read");
this.dataFactory.getList(odataParams)
.success(function (result) {
options.success(result);
})
.error(function (error) {
console.log("data error");
});
}
},
batch: false,
pageSize: 10,
serverPaging: true,
change: function (e) {
console.log("change: " + e.action);
// do something with e
},
schema: {
data: function (data) {
//console.log(data)
return data.value;
},
total: function (data) {
console.log("count: " + data["odata.count"]);
return data["odata.count"];
},
model: {
id: "ContentTypeId",
fields: {
ContentTypeId: { editable: false, nullable: true },
//UserId: {editable: false, nullable: false },
Description: { type: "string", validation: { required: true } },
//msrepl_tran_version: { type: "string", validation: { required: true } }
}
}
},
error: function (e) {
//var response = JSON.parse(e.responseText);
var response = e.status;
console.log(response);
}
}) // dataSource
} // contentTypes
};
return dataSourceFactory;
});
总而言之,
var dataSource = dataSourceFactory.contentTypes(); // returns a function, rather than kendo.data.DataSource object
1) 数据源必须是新的 kendo.data.DataSource
的值对象,而不是函数。由于工厂返回该函数,我如何在我的 Controller 中使用它,这是解决这个问题的正确方法吗?如果不是建议的话?
2) 我将在 dataSourceFactory
中定义各种数据源。并按上述方式使用。这是推荐的吗(我要重用代码,而不是为每个数据源使用一堆单独的工厂),如果没有,有建议吗?
最佳答案
多亏了评论的微妙插入,我才弄清楚了这一点。
第一个问题是我实际上并没有从函数调用中返回任何内容(缺少 contentTypes:
中的 return
语句)。
其次,我必须在 dataSourceFactory
中定义一个 dataFactory
来表示 abstractDataFactory
:
app.factory('dataSourceFactory', function (abstractDataFactory) {
var dataFactory;
function dataSourceFactory(odataUrlBase) {
dataFactory = new abstractDataFactory(odataUrlBase);
}
dataSourceFactory.prototype = {
contentTypes: function () {
return new kendo.data.DataSource({ ... }...
我仍然不清楚的是,这是否是一种好方法 - 让一个工厂返回我的所有数据源对象。
关于javascript - AngularJS : How to return a reusable object from a factory?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22357238/
哪些原则、代码质量、实践、方法、语言或框架特性可帮助您在更广泛的情况下有效地重用函数、类等。所有情况都很有趣:您可以修改代码的实现和接口(interface)以启用/改进重用,或者只修改实现,或者什么
我很想知道人们如何组织他们的代码库,特别是关于可重用组件。我在下面谈论 OO 术语,但我也对您如何为其他类型的语言组织库感兴趣。 例如: 您是所有类库项目的忠实拥护者,还是更喜欢将所有内容都保存在一个
我经常编写一次性代码(在 research environment 中) - 例如探索科学属性或过程的算法或模型。许多这些“实验”是一次性的,但有时我发现我需要稍后使用。例如,我刚刚发现了我 7 年前
每个人都喜欢谈论可重用性。在我工作的地方,每当有人提出或测试一些新想法时,总是会出现可重用性的问题。 “我们希望最大限度地提高我们在这方面的投资,让它可重复使用。” “可重用性将以更少的工作带来更高的
我认为这是个愚蠢的问题,但是有没有办法将“if”语句用作可重用函数 success: function(msg){ if(msg=='o'){ $j('#ok').s
情况是这样的:我正在开发一个相对较大的 C++ 程序(在 Linux 中)。这个程序可以分为两部分。 A 部分只是一堆基于一些数据的预计算,这些数据随着时间的推移保持不变,构建了一个相当复杂的大数据结
有没有办法提取并参数化 Logback XML 配置的重复部分?我有许多不同的滚动文件附加器,除了文件名之外,配置基本相同。我将其与一堆关闭“可加性”的记录器结合使用,这样我就可以将堆栈的不同部分重定
如果我有一个在两个 Tibco 项目中使用的子流程,重用它的最佳方式是什么? 目前我正在复制两个项目中的子流程,但这会导致代码重复,难以维护。 最佳答案 或者,如果您使用的是 BusinessWork
如果我有一个在两个 Tibco 项目中使用的子流程,重用它的最佳方式是什么? 目前我正在复制两个项目中的子流程,但这会导致代码重复,难以维护。 最佳答案 或者,如果您使用的是 BusinessWork
是否可以制作一个可重用的 xml 代码,其中包含一些 javascript?像导入或包含。我的问题是我需要编写不同的 xml 文件并且几乎都是一样的,改变的只是一些属性。任何最佳实践?谢谢彼得罗 最佳
我是 asp.net 的新手,所以这可能是一个非常基本的问题,但我无法弄明白。 我在互联网上找到了一些连接到数据库的代码。我创建了一个命名空间和一些类,以便在不同的项目中使用相同的代码。 代码和我的类
刚刚开始使用 Angular: 我想创建一个共享配置单例,其中包含例如服务端点的baseURL。 Angular 中的模式是什么? 最佳答案 我建议使用类似常量 https://docs.angula
我正在学习 angularjs 并开发几个应用程序(同时,老板的命令)。 我的所有应用程序都有一些与初始化相关的常见任务,但我不知道如何使这些任务成为可重用模块(是的,也许我是个菜鸟)。我研究了很多,
阅读讨论后 How to create generic/reusable code with Scrum?我想到了我在可重用组件方面的经历。 我创建了几个在其他项目中成功重用的“技术组件”。 我还创建
关闭。这个问题是opinion-based .它目前不接受答案。 想要改进这个问题? 更新问题,以便 editing this post 可以用事实和引用来回答它. 关闭 7 年前。 Improve
在过去的几个小时里,我一直在尝试自己完成这项工作,并使用 Google 寻找解决方案,但无济于事。 因此,如果您能提供帮助,我将不胜感激! 基本上我有一个页面,在“预览模式”下有 3 个独立的传记,它
我正在尝试在 PDO 中创建可重用的代码。 这是我的代码。 $myClass = new main_c(); $condition = "email_address = :email_address
我有一个 JTable,它的行数不断增加(可能是无限多)。避免高内存使用的解决方案是将内容“缓存”到文件中,并根据当前滚动条光标位置从该文件中检索页面/数据 block 。另一个“额外”问题是根据列值
这是问题所在,当我使用 TableViewController 并在选定的单元格上添加行为时。该行为显示两次 我怎样才能避免这种情况? // MARK: - Table Deleget overrid
我正在构建一个网络应用程序,它有一组功能,用户可能会执行几次,但涉及足够多的异步操作,回调会变得有点失控。 $.Deffered 和 $.when 可以多次“使用”的现实替代方案是什么? 我不是在寻找
我是一名优秀的程序员,十分优秀!