2013-07-10 11 views
9

Mam problem z zastosowaniem niestandardowych procedur obsługi powiązań podczas korzystania z nokautu z requireJS. Zasadniczo w przeszłości dodałem globalny plik js do obsługi powiązań, który zawiera wszystkie moje niestandardowe powiązania. Teraz, gdy używam requireJS do wymuszania zależności, nie jestem pewien, jak uzyskać dostęp do tych niestandardowych powiązań.Niestandardowe podpórki wiążące z nokautem i RequJJ

kiedyś zrobić tworzyć globalne funkcje z

function KOCustomBindings() { 
// Custom Bindings 
ko.bindingHandlers.returnKey = { 
//handler code 
} 
} 

teraz, że używam wymagać, czuję się jak gdyby mam zdefiniować komunikat

define(['jquery', 'knockout'], 
    function($, ko)){ 
// Custom Bindings 
return KOCustomBindings; 
} 
}); 

Jednakże, I don” t wierzyć, że wiązania zostaną wykonane, chyba że zostaną specjalnie nazwane, być może w podkładce? Czy ktoś ma jakieś pomysły na ten temat?

Dzięki za pomoc,

Odpowiedz

9

Od niestandardowe powiązania modyfikować ko obiekt, muszą być ładowane tylko jeden raz, a ich moduły nie muszą zwracać niczego. Jeśli jako pierwszy krok w aplikacji masz główną/pozycję/aplikację, wystarczy, że będziesz wymagać niestandardowych powiązań i rozszerzeń.

define(['jquery', 'knockout'], function($, ko)){ 
    // Custom Bindings 
    ko.bindingHandlers.returnKey = { ... } 

    //NO return needed 
}); 

Następnie w sekcji startowej, tylko

require('lib/custom-ko-bindings'); 
3

Łatwym sposobem, aby to zrobić, to określić niestandardowe wiążąca jako moduł AMD i wymagają od viewmodel macierzystej. Przykład -

Bindings.js

define(, function() { 
    ko.bindingHandlers.Date = { 
     update: function (element, valueAccessor) { 
      var value = valueAccessor(); 
      var date = moment(value()); 
      var strDate = date.format('MM-DD-YYYY'); 
      $(element).text(strDate); 
     } 
    }; 
}); 

Twój ViewModel -

define(['jquery', 'knockout', 'bindings'], 
    function($, ko, bindings)){ 
}); 

To daje żadnego elementu DOM w dostępie do wiązania obsługi nokaut 'data' na przykład. (Mój przykład jest taki, który użyłem z moment.js)

We wszelkich poglądów dziecko lub widoków, które wymagają nadrzędnej widoku modelu teraz powinieneś być w stanie korzystać

<span data-bind="Date: myDate" /> 
3

udało mi się to osiągnąć poprzez owinięcie nokaut w moim module wiązania i powrocie zmodyfikowany instancji nokaut. Oto config skończyło się z:

require.config({ 
    paths: { 
    'knockout': 'lib/knockout', // name that's only used once in customBindings.js 
    'ko': 'app/customBindings' 
    } 
    // more config ommitted 
}); 

Moje niestandardowe powiązania:

define(['knockout'], function (ko) { 
    ko.bindingHandlers.returnKey = { 
     //handler code 
    } 
    return ko; 
}); 

i moi moduły, które wymagają tylko nokaut potrzebne do odniesienia 'KO'.

require(['jquery', 'ko', 'underscore'], function ($, ko, _) { 
    // do knockout-y things! now with bindings! 
});