使用此订单时:
<script src="lib/angular/angular.js"></script>
<script src="lib/onsen/js/onsenui.js"></script>
<script src="http://include.jaydata.org/datajs-1.0.3.js"></script>
<script src="http://include.jaydata.org/jaydata.js"></script>
<script src="http://include.jaydata.org/jaydatamodules/angular.js"></script>
我收到此错误
TypeError: Class.extend is not a function
at Object.<anonymous> (onsenui.js:13049)
at Object.invoke (angular.js:4535)
at Object.enforcedReturnValue [as $get] (angular.js:4387)
at Object.invoke (angular.js:4535)
at angular.js:4352
at getService (angular.js:4494)
at Object.invoke (angular.js:4526)
at Object.enforcedReturnValue [as $get] (angular.js:4387)
at Object.invoke (angular.js:4535)
at angular.js:4352
使用此订单时:
<script src="lib/angular/angular.js"></script>
<script src="http://include.jaydata.org/datajs-1.0.3.js"></script>
<script src="http://include.jaydata.org/jaydata.js"></script>
<script src="http://include.jaydata.org/jaydatamodules/angular.js"></script>
<script src="lib/onsen/js/onsenui.js"></script>
注意:编辑以更正订单
jaydata.js:3342 Uncaught TypeError: Cannot read property 'apply' of undefined
任何帮助表示赞赏!
答案 0 :(得分:1)
似乎jaydata和onsenui都在使用window.Class
,但是它们的实现差别很大。 Onsen使用John Resig的实现,而jaydata的版本Class
实际上是他们ClassEngineBase
的实例。至少从我的观点来看,使这两个实现一起工作的问题是,在jaydata中,版本Class
实际上是一个实例而不是一个函数。如果它是一个函数,只需将extend方法添加到jaydata的实现中就可以很容易地合并这两个实现。
你仍然可以尝试这样做,但它不会那么容易,如果做得不好可能会出现一些新的错误。
所以你的选择是:
1。
顺序:[jaydata
,onsenui
,patch
],其中patch是onsenui版本的修改版本。
(function(){
var initializing = false, fnTest = /xyz/.test(function(){xyz;}) ? /\b_super\b/ : /.*/;
this.Class.extend = function(prop) {
var _super = this.prototype || {};
initializing = true;
var constructor = typeof this === 'function' ? this : function(){};
var prototype = new constructor();
initializing = false;
for (var name in prop) {
prototype[name] = typeof prop[name] == "function" &&
typeof _super[name] == "function" && fnTest.test(prop[name]) ?
(function(name, fn){
return function() {
var tmp = this._super;
this._super = _super[name];
var ret = fn.apply(this, arguments);
this._super = tmp;
return ret;
};
})(name, prop[name]) :
prop[name];
}
function Class() {
if (!initializing && this.init)
this.init.apply(this, arguments);
}
Class.prototype = prototype;
Class.prototype.constructor = Class;
Class.extend = arguments.callee;
return Class;
};
})();
但是,如果它有效,我还没有真正测试它,并且可能存在一些问题。
您不包括angular-onsenui.js
,因此我猜您使用的是onsen 1,而不是onsen 2. Here是1.3.15
的略微修改版本,不应该碰撞(未经测试,对不起)。
在JayData中,他们将该类存储在$data.Class
中,因此事实证明http://include.jaydata.org/jaydata.js
2874: $data.Class = Class = new ClassEngineBase();
3342: global["$C"] = function () { Class.define.apply(Class, arguments); };
您可以从第一行中删除= Class
,然后将第二行的两种情况从Class
更改为$data.Class
,或者只在第2873行写var Class;
。 - 实际上它们似乎已经有implemented this change但似乎还没有在线版本。
答案 1 :(得分:0)
最后我找到了一个基于Ilia Yatchev答案的解决方案,谢谢他。
首先我使用下载的jaydata文件而不是在线文件,因为它包含Ilia Yatchev在答案中提到的代码更改
var Class;
$data.Class = Class = new ClassEngineBase();
注意:订单现在不是问题
<script src="scripts/platformOverrides.js"></script>
<script src="lib/angular/angular.js"></script>
<script src="lib/onsen/js/onsenui.js"></script>
<script src="lib/datajs-1.0.3.js"></script>
<script src="lib/jaydata.js"></script>
<script src="lib/jaydatamodules/angular.js"></script>
然后在代码中我们保存创建实体的引用:
var Todo = $data.Entity.extend("Todo", {
Id: { type: "int", key: true, computed: true },
Task: { type: String, required: true, maxLength: 200 },
DueDate: { type: Date },
Completed: { type: Boolean }
});
我们保存创建的上下文的引用:
var TodoDatabase = $data.EntityContext.extend("TodoDatabase", {
Todos: { type: $data.EntitySet, elementType: Todo }
});
然后我们可以安全地使用这些参考文献:
var todoDB = new TodoDatabase("MyTodoDatase");
todoDB.onReady(function() {
var tasks = todoDB.Todos.addMany([
{ Task: 'Step0: Get this this list', Completed: true },
{ Task: 'Step1: Define your data model'},
{ Task: 'Step2: Initialize data storage'}
]);
todoDB.saveChanges(function() {
tasks.forEach( function(todo) { alert(todo.Id) });
});
});
如果我没有保存对实体和上下文的引用,我会收到此错误
angular.js:12722 ReferenceError: Contact is not defined
at Object.<anonymous> (app.js:343)
at Object.invoke (angular.js:4535)
at Object.enforcedReturnValue [as $get] (angular.js:4387)
at Object.invoke (angular.js:4535)
at angular.js:4352
at getService (angular.js:4494)
at Object.invoke (angular.js:4526)
at extend.instance (angular.js:9380)
at nodeLinkFn (angular.js:8497)
at compositeLinkFn (angular.js:7929)