[英]Using RequireJS with Knockout and Knockout Mapping Merge Plugin
我在嘗試將requireJS與敲除和敲除映射合並插件(而不是敲除映射插件)一起使用時遇到問題,請參見此處的鏈接: https : //github.com/grofit/knockout.mapping.merge/blob/master/src /knockout.mapping.merge.js
腳本:
requirejs.config({
paths: {
'knockout': 'scripts/knockout-3.0.0',
'ko-merge': 'scripts/knockout_mapping_merge'
},
shim: {
'knockout_mapping_merge': {
deps: ['knockout']
}
}
});
require(['knockout', 'ko-merge'], function (ko) {
var vm = function () {
var self = this;
self.forename = ko.observable("FName1");
self.surname = ko.observable("SName1");
self.merge = function () {
var x = {
forename: 'FName2',
surname: 'SName2'
};
ko.mapping.mergeFromJS(self, x);
};
};
ko.applyBindings(new vm());
});
我收到的錯誤是:SCRIPT5007:無法設置未定義或空引用的屬性'mergeFromJS',文件:敲門_mapping_merge.js,第41行,第5列
敲除映射合並的聲明如下:
(function(knockout){
...
})(typeof exports === 'undefined'? this['ko'] : require("knockout"));
我的理解是,這應該將淘汰賽稱為依賴項,但它似乎不起作用...為何有任何想法?
您的問題是,您在路徑和墊片配置中指定的模塊名稱不同。
requirejs.config({
paths: {
'knockout': 'scripts/knockout-3.0.0',
'ko-merge': 'scripts/knockout_mapping_merge'
},
shim: {
'knockout_mapping_merge': {
deps: ['knockout']
}
}
});
應該
requirejs.config({
paths: {
'knockout': 'scripts/knockout-3.0.0',
'ko-merge': 'scripts/knockout_mapping_merge'
},
shim: {
'ko-merge': {
deps: ['knockout']
}
}
});
插件中的那部分代碼正在尋找CommonJS場景(例如nodejs模塊),而不是AMD場景(如requirejs)。
嘗試填充淘汰賽以導出ko
:
shim: {
'knockout': {
exports: 'ko'
},
// you should be using the module ID rather than the filename here
'ko-merge': {
deps: ['knockout']
}
}
感謝您的答復,不幸的是未能解決問題,我最終更改了插件,因此它周圍的定義可以與requirjs一起使用:
define(['knockout'], function(knockout) {
knockout.mapping = {};
...
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.