2014-10-15 9 views
3

아마도 내가 검도의 MVVM 구현의 개념을 오해하고있어,하지만 ... 내가보기 모델에 데이터 바인딩되는 간단한 검도 UI 모바일 view 있습니다데이터

var myViewModel = kendo.observable({ 
    myEntity: null, 

    onViewShow: function (e) { 
     var bindingEntity = myStaticDataSource[0]; 
     myViewModel.set("myEntity", bindingEntity); 
    } 
}); 

myStaticDataSourcename 또는 description과 같은 필드가있는 간단한 JavaScript 객체 인 정적 요소입니다.

보기 및 입력 필드 뷰 모델에 바인딩 :

사용자가 입력 필드, 해당 필드를 변경
<div data-role="view" data-layout="default" data-model="myViewModel" data-bind="events: { show: onViewShow }"> 
    <form> 
     <ul data-role="listview" data-style="inset"> 
      <li> 
       <label> 
        Name 
        <input type="text" data-bind="value: myEntity.name" /> 
       </label> 
      </li> 
     </ul> 
    </form> 
</div> 

(예 name)에 데이터 바인딩 뷰 모델 개체 myEntity 갱신된다 . 하지만 : 내가 예상했던 것은 myStaticDataSource에있는 엔티티도 업데이트되었으므로 개체를 복제하지 않기 때문입니다. 하지만 그렇지 않습니다! 그 값은 원래 값으로 유지됩니다. 왜 이런거야? Kendo의 MVVM 처리에 대해 빠진 것이 있습니까?

+0

당신은'var bindingEntity = myStaticDataSource [0]'을 사용하여 변수에 요소를 할당하고 그 변수를 뷰에 바인딩함으로써 복제 할 수 있습니다. 그것은 당신이 말한 것과 정확하게 일치합니다. 변수'bindingEntity' (즉, myEntity')가 업데이트되고 myStaticDataSource는 업데이트되지 않습니다. – Brett

+1

@Brett 그건 사실이 아닙니다. 'var bindingEntity = myStaticDataSource [0]'는 항목을 복제하지 않으므로 검도'.set()'에 대한 호출이 부작용입니다. – CodingWithSpike

답변

5

이것은 검도에서 관찰 가능한 객체 및 배열의 ​​부작용입니다. .set() 메서드를 사용하여 ObservableObject에 속성을 할당하면 할당 된 항목도 관찰 가능하게 만들려고합니다. myStaticDataSource에있는 항목은 검도 관측소가 아닌 일반 JS 개체이므로 Kendo가 개체를 새 ObservableObject으로 래핑합니다. 이것은 객체가 더 이상 동일하지 않다는 것을 의미합니다.

var items = [{name: "item one"}]; 
var vm = kendo.observable({item: undefined}); 
vm.set("item", items[0]); 
vm.item === items[0]; // returns FALSE 
items[0] instanceof kendo.data.ObservableObject // returns FALSE 
vm.item instanceof kendo.data.ObservableObject // returns TRUE 


var items = kendo.observable([{name: "item one"}]); 
var vm = kendo.observable({item: undefined}); 
vm.set("item", items[0]); 
vm.item === items[0]; // returns TRUE 
items[0] instanceof kendo.data.ObservableObject // returns TRUE 
vm.item instanceof kendo.data.ObservableObject // returns TRUE 

이의 "수정"중 하나를 수행하는 것입니다 :

이 더 이해 할 수


myStaticDataSource을 확인 모든 항목을 만들 것입니다 검도 DataSource을, 당신 ObservableObject.

var myStaticDataSource = new kendo.data.DataSource({ 
    data: [ 
     {name: "Bob"} 
    ] 
}; 

확인 myStaticDataSource ObservableObject

var myStaticDataSource = kendo.observable([ 
    {name: "Bob"} 
]); 

myStaticDataSource 배열 ObservableObject

의 각 항목을 확인 당신이 그것을 넣어 모든 항목을 만들 것 검도 ObservableArray,
var myStaticDataSource = [ 
    kendo.observable({name: "Bob"}) 
]; 
+0

감사! 나는'.set()'의 호출이 객체를 복제하는 부수적 인 효과가 있다는 것을 몰랐다. 이제는 분명합니다! – Matthias