새로운 observableArray 속성을 MyViewModel의 일부에 추가하는 사용자 지정 처리기를 작성하여 처리기에서 바인딩 된 요소 내의 중첩 된 템플릿에 항상 올바른 배열 (see jsfiddle for full example)이 있는지 확인했습니다. 현재 오브젝트 bindingContext.$data
가 ('아이들'내 예제에서) 차례로 그 관찰 개체의 관찰 배열이 있다면 그건이 valueAccessor()[0]
같은 이름의 속성으로 관찰 가능한 객체를 가지고 있다면 체크 핸들러 내에서 knockout.js에서 관찰 가능 객체에 속성을 추가 한 후 왜 TypeError가 발생합니까?
<div data-bind="contentAvailable: ['children','pos1']">
<div data-bind="template: { name: 'default', foreach: children().pos1 }">
</div>
이름이
valueAccessor()[1]
('pos1') 인 소유 - 부재시에 그들을 괴롭히는 것입니다.
은 처음에는
//within the handler
bindingContext.$data[valueAccessor()[0]]()[valueAccessor()[1]]=ko.observableArray([]);
//and after ko.applyBindings(MyViewModel)
child1.children().pos1().push(new ViewChild(2));
child1.children().pos1.valueHasMutated();
valueHasMutated() and reseting the observable as shown here 노력이 거의-일 -를 추가 한 후 - 나는 돌연변이에 대해 내가 값을 밀어 때마다 통지하지 않았기 때문에 나는 핸들러 내에서 valueHasMutated()
를 배치하려고 observableArray()
하지만 그 결과는 Uncaught TypeError: object is not a function
이됩니다 (위의 1 행에는 typeof
이 표시되고 그렇지 않으면 XD가 표시됨).
근본적으로 잘못된 방법으로 이러한 오브젝트를 사용하거나 녹아웃이 어떻게 마법에 영향을 미치는지에 대한 이해가 부족합니까? : D
잘 그래 그건를 당황 스럽네요. 오타를 제거하면 내가 원하는 것에 더 가까워지지 않았습니다. 초기 문제는 템플릿의 일부를 묶을 속성이없는 개체에서 템플릿을 사용하려고 할 때 오류가 발생한다는 것입니다. 처음에 avioid 오류에 대한 간단한 'if'바인딩을 사용하고 나중에 속성을 추가하려고 시도했지만 DOM도 업데이트하지 못했습니다. –
나는 당신의 observables/observableArrays를 당신과 같이 즉석에서 만들 수 있다고 생각합니다. 하고있다. 또 다른 접근법은 observable을 사용하여 나중에 채워지는 전체 객체를 유지하는 것입니다. 그런 다음, 'if'바인딩은 관찰 가능 객체가 객체로 채워질 때마다 실행됩니다. –