使用此命令时:
<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
任何帮助表示赞赏!
最佳答案
看来jaydata和onsenui都在使用window.Class
,但是它们的实现却大不相同。 Onsen使用John Resig的实现,而在jaydata的版本中,Class
实际上是其ClassEngineBase
的一个实例。至少从我的角度来看,使这两个实现一起工作的问题是,在jaydata的版本中,Class
实际上是实例而不是函数。如果这是一个函数,那么只需将扩展方法添加到jaydata的实现中,就很容易合并这两种实现。
您仍然可以尝试执行此操作,但这并没有那么容易,如果执行不正确,可能会出现一些新的错误。
因此,您的选择是:
仍然尝试合并实现
修改温泉用户界面
修改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,而不是onsen2。Here是1.3.15
的略微修改版本,不应有冲突(未经测试,对不起)。在JayData中,他们将类存储在
$data.Class
中,因此事实证明,在http://include.jaydata.org/jaydata.js
中只有2个地方使用了全局位置。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,但是好像还没有在线版本。因此,如果您不想更改文件,我想也许JayData可以在某个地方提供更新的版本。对于Onsen-Onsen 1的开发已经完成,我们仅在Onsen 2上进行开发。同一bug可能会在当前Beta中持续存在,但在修复之前可能不会太久。
关于javascript - onsenui和jaydata不共存,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36392774/