2014-02-09 172 views
0

遇到麻煩嘗試使用與基因敲除和基因敲除映射合併插件(未淘汰賽映射插件)requireJS,見鏈接在這裏:https://github.com/grofit/knockout.mapping.merge/blob/master/src/knockout.mapping.merge.js與淘汰賽和淘汰賽作圖RequireJS合併插件

腳本:

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':knockout_mapping_merge.js,線:41,柱:5

淘汰賽映射合併聲明,像這樣:

(function(knockout){ 
... 
})(typeof exports === 'undefined'? this['ko'] : require("knockout")); 

我的理解是,這應該叫淘汰賽作爲一個依賴,但它似乎沒有工作...任何想法,爲什麼?

回答

0

插件中的那一點代碼正在尋找一個CommonJS場景(例如nodejs模塊),而不是像requirejs這樣的AMD場景。

嘗試勻場淘汰賽出口ko

shim: { 
    'knockout': { 
     exports: 'ko' 
    }, 
// you should be using the module ID rather than the filename here 
    'ko-merge': { 
     deps: ['knockout'] 
    } 
} 
0

感謝您的答覆,遺憾的是沒有解決不了的話,我最終改變插件所以它有它周圍的定義與requirjs工作:

define(['knockout'], function(knockout) { 
    knockout.mapping = {}; 
... 
}); 
1

你的問題是你在路徑和填充配置中指定的模塊名稱是不同的。

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'] 
     } 
    } 
});