KnockOutJS - Bir baxışda birdən çox baxış rejimi

Mənim ərizim olduqca böyük, hər bir görünüşü bir ViewModel ilə idarə etmək üçün çox böyük olur.

Beləliklə, bir neçə ViewModels yaratmaq və hamısını bir görünüşə yükləmək nə qədər çətin olardı. X ViewModel məlumatlarını Y ViewModel məlumatlarına ötürə bilməli olduğumu nəzərə alsaq, fərdi ViewModels bir-biri ilə ünsiyyət qurmağı və ya ən azı bir-biri ilə əlaqə saxlamalıdır.

Məsələn, mənim seçdiyiniz elementin identifikatorunu <select> -də ayrı bir ViewModel-də başqa bir Ajax zənginə keçməyə imkan verən, seçilmiş bir vəziyyətə malik olan bir <select> açılan siyahısı var.

Bir baxımdan çox ViewModels ilə işləyərkən hər hansı bir xal qiymətləndirilir :)

191
15 февр. CLiown 15 fevralda təyin etdi 2012-02-15 15:52 '12 at 15:52 2012-02-15 15:52
@ 5 cavab

Hamısı eyni səhifədə olmalıdırlarsa, bunun bir sadə üsulu digər görünüş modellərinin bir sıra (və ya əmlak siyahısı) olan əsas görünüş modeli olmalıdır.

 masterVM = { vmA : new VmA(), vmB : new VmB(), vmC : new VmC(), } 

Sonra masterVM , səhifənin özü üçün zəruri hallarda digər xüsusiyyətlərə malik ola bilər. masterVM modelləri arasında əlaqə bu vəziyyətdə çətin olmayacaq, çünki siz masterVM vasitəsilə masterVM edə bilərsiniz və ya bağlama və ya digər yapılandırılabilir parametrlərdə $parent / $root bağlamalarından istifadə edə bilərsiniz.

145
15 февр. John Papanın 15 fevralda verdiyi cavabı 2012-02-15 16:59 '12 at 4:59 pm 2012-02-15 16:59

Knockout artıq birdən çox model bağlamasını dəstəkləyir. ko.applyBindings() metodu isteğe bağlı bir parametr alır - elementin və onun uşaqlarının bağlandığı aktivləşdiriləcəkdir.

Məsələn:

 ko.applyBindings(myViewModel, document.getElementById('someElementId')) 
border=0

Bu, elementin aktivləşdirilməsini bəzi someElementId və onun nəslindən olan identifikatorla someElementId .

Ətraflı məlumat üçün sənədlərə baxın.

282
20 июля '12 в 5:36 2012-07-20 05:36 cavab 20 iyul 2012-ci il saat 5: 36- da sənətgersappa tərəfindən verilir. 2012-07-20 05:36

ViewModels bir çox görünüşü ilə çox böyük bir layihəni bitirdikdən sonra bu mənim cavabımdır.

Html görünüşü

  <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title></title> </head> <body> <div id="container1"> <ul> <li >Container1 item</li> <!-- ko foreach: myItems --> <li>Item <span data-bind="text: $data"></span></li> <!-- /ko --> </ul> </div> <div id="container2"> <ul> <li >Container2 item</li> <!-- ko foreach: myItems --> <li>Item <span data-bind="text: $data"></span></li> <!-- /ko --> </ul> </div> <script src="js/jquery-1.11.1.js"></script> <script src="js/knockout-3.0.0.js"></script> <script src="js/DataFunction.js"></script> <script src="js/Container1ViewModel.js"></script> <script src="js/Container2ViewModel.js"></script> </body> </html> 

Bu baxımdan, id = container1 və id = container2 üçün iki görünüşlü model yaratmaq iki ayrı javascript fayl.

Container1ViewModel.js

 function Container1ViewModel() { var self = this; self.myItems = ko.observableArray(); self.myItems.push("ABC"); self.myItems.push("CDE"); } 

Container2ViewModel.js

 function Container2ViewModel() { var self = this; self.myItems = ko.observableArray(); self.myItems.push("XYZ"); self.myItems.push("PQR"); } 

Sonra bu 2 görünüş rejimi DataFunction.js-də ayrı görünüş rejimi kimi qeydə alındıqdan sonra

 var container1VM; var container2VM; $(document).ready(function() { if ($.isEmptyObject(container1VM)) { container1VM = new Container1ViewModel(); ko.applyBindings(container1VM, document.getElementById("container1")); } if ($.isEmptyObject(container2VM)) { container2VM = new Container2ViewModel(); ko.applyBindings(container2VM, document.getElementById("container2")); } }); 

Beləliklə, ayrı-ayrı div'lar üçün hər hansı bir baxım rejimi əlavə edə bilərsiniz. Lakin qeydə alınmış div içərisində div üçün ayrı bir görünüş modeli yaratmaqğı unutmayın.

20
16 июля '14 в 16:29 2014-07-16 16:29 Cavab Janith Widarshana tərəfindən 16 iyul 16: 14-də verilir 2014-07-16 16:29

Javaut MultiModels plugin-lərinə baxın - https://github.com/sergun/Knockout-MultiModels

3
27 июня '12 в 19:09 2012-06-27 19:09 Cavab Sergey Zvezdinə verildi 27 İyun 2012, 19:09 2012-06-27 19:09

Bunun üçün komponentlərdən istifadə edirik. ( http://knockoutjs.com/documentation/component-overview.html )

Məsələn, inkişaf etdiyimiz bu komponent kitabxanamız var: https://github.com/EDMdesigner/knobjs

Koda daxil olsanız, məsələn, bir neçə yerdəki düyməni tərkib hissəsini təkrar istifadə edəcəyik.

0
28 июня '16 в 23:15 2016-06-28 23:15 Cavab 28 iyul, saat 23:15, 2016-06-28 23:15 tarixində gyula.nemeth verilir

Data haqqında digər suallar və ya sual