簡體   English   中英

將RequireJS與Knockout和Knockout映射合並插件一起使用

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM