Snažím sa pracovať so všetkými účtami Script # Závislosť.
Mám projekt Script # odkazujúci na knockout knižnicu. Ktoré som po uplynutí určitého času pracoval s Requiem.
Teraz by som rád použil mapovanie KnockoutJS, ktoré vyhovuje niečomu
var model = ko.mapping.fromJS(data, {}, new ViewModel());
Avšak ko.mapping nie je definovaný.
Ak manuálne (len na testovanie) zmením kompilovaný súbor .js tak, aby zahŕňal mapovanie takto:
define("MyApp",
["ss", "jquery", "knockout", knockout.mapping],
function (ss, $, ko, mapping) { /*...*/ }
);
"mapovanie" je definované, ale nie ako "ko.mapping", čo je spôsob, akým to kompilátor odkazuje.
Nejaké nápady?
Toto je moja konfigurácia:
requirejs.config({
paths: {
"jquery": "jquery-1.9.1",
"jqueryValidation": "jquery.validate",
"knockout": "knockout-2.2.0",
"knockout.mapping": "knockout.mapping-latest.debug",
"modernizr": "modernizr-2.6.2"
},
shim: {
"jqueryValidation": ["jquery"],
"jquery.validate.unobtrusive": ["jquery", "jqueryValidation"],
"jquery.unobtrusive-ajax": ["jquery"],
"knockout.mapping": ["knockout"]
}
});
odpovede:
3 pre odpoveď č. 1Znie to ako Script # to predpokladá ko
a ko.mapping
sú v globálnom mennom priestore a nie sú načítané ako AMD. Ale, Knockout a Knockout.mapping sú kódované tak, že keď zistia AMD / RequireJS, nepoužívajú globálny priestor názvov.
Niekoľko možností, ako to vyriešiť:
1 - vstreknite ho hneď, ako sa volá request.config (na základe nižšie uvedených pripomienok), než čakať na niečo, čo skutočne požaduje vyradenie alebo knockout.mapping
requirejs.config({
// same as original
});
require(["knockout", "knockout.mapping"], function (ko, m) {
ko.mapping = m;
})
2 - vytvorte si vlastný baliaci modul aby ste ju vniesli späť do globálneho prostredia. Niečo také:
define("knockout.inject", ["knockout"], function(k)
{
window.ko = k; // make a ko global
return k; // but also return what a normal AMD require expects
});
define("knockout.mapping.inject", ["knockout.mapping"], function(m)
{
window.ko.mapping = m; // make a ko.mapping global
return m; // but also return what a normal AMD require expects
});
Potom môžete vytvoriť konfiguráciu mapy RequireJS tak, aby ste vždy, keď požiadali o "knockout" alebo "knockout.mapping", dostali transparentne premenené na vyššie uvedené balíky.
requirejs.config({
paths: { // same as original },
shim: { // same as original },
map: {
"*": {
"knockout": "knockout.inject",
"knockout.mapping": "knockout.mapping.inject"
},
// prevent cycles
"knockout.inject": {"knockout": "knockout"},
"knockout.mapping.inject": {"knockout.mapping": "knockout.mapping"}
}
});
0 pre odpoveď č. 2
Táto vzorka (https://github.com/nikhilk/scriptsharp/tree/cc/samples/KOWorld) zobrazuje pomocou skriptu # + knockout spolu s požiadavkami ako nakladač AMD.
Uistite sa, že šablóna skriptov v AssemblyInfo.js uvidíte, aby ste túto prácu vykonali.
Dúfajme, že to pomôže a pracuje.