받아야하는 솔루션이다 : 나는 확실히 난 후 정확히 무엇을 그 아무것도 찾을 수 있으며, UI 요구 사항은 특히 난제 나는까지 해요 어디
바이올린의 조금 보인다 네가 시작 했어. 나는 당신의 HeroItem
을 리팩토링하여 설정 오브젝트와 링크 된 영웅 (옵션)을 가져갔습니다.
현재 배열은 고정 길이라고 가정합니다. jQuery extends를 사용하여 딥 복사를 수행하여 항목 배열에서 HeroItem
에 매핑하여 after
배열을 만듭니다.
HeroItem에서 link
이 전달되면 관찰 결과에 대한 변경 사항을 구독하고 지정된대로 단방향으로 업데이트합니다.
function HeroItem(config, link) {
var self = this, prop;
self.item = config.item;
self.int = ko.observable(config.int);
self.ias = ko.observable(config.ias);
self.critdmg = ko.observable(config.critdmg);
self.critpc = ko.observable(config.critpc);
self.min = ko.observable(config.min);
self.max = ko.observable(config.max);
if (link) {
for (prop in link) {
if (link.hasOwnProperty(prop) && ko.isObservable(link[prop])) {
console.log("subscribing " + prop);
link[prop].subscribe((function(p) {
return function (newValue) {
console.log("updating " + p+ " to " + newValue);
self[p](newValue);
}
})(prop));
}
}
}
}
self.after = ko.observableArray(ko.utils.arrayMap(self.items(), function(i) {
return new HeroItem($.extend({}, ko.toJS(i)), i);
}));
http://jsfiddle.net/madcapnmckay/2MNFn/1/
필요 없음 사용자 정의 바인딩, 그냥 모든 KO의 관찰 가능한 가지고있는 구독 기능을 사용합니다. 이것을 동적 길이에 맞도록 확장하려면 배열을 간단하게 구독하고 그에 따라 after 배열을 정리하십시오.
희망이 도움이됩니다.
분명히 두 개의 별개의 배열이 필요합니다. 'after' 배열은'before '(즉, 딥 복사)의 복사본입니다. 그런 다음 업데이트시에'after' 배열을 업데이트하는'before' 배열에 대한 사용자 정의 녹아웃 바인딩을 정의해야합니다. 그리고 너 끝났어! 추신 jbabey, definetly not - 나는 디아블로 3을 신경 쓰지 않는다. :) – freakish
감사합니다. - 여기에 딥 카피를하는 올바른 방법은 무엇입니까? 내가 시도한 것들은 동기화되어 업데이트되었거나 제대로 작동하지 않았다. 사용자 지정 바인딩을 말할 때 클래스 함수를 작성한다는 의미입니까? 나는 용어가 너무 좋지 않다! 편집 : 문서 페이지를 찾았습니다. 감사합니다. 정확히 내가 찾고있는 페이지입니다. – kimadactyl
내가 "사용자 지정 바인딩"이라고 말하면 다음과 같은 의미입니다. http://knockoutjs.com/documentation/custom-bindings.html 깊은 복사본은 ... 새 HeroItem (...을 초기화하는 것으로 충분합니다.)'를'HeroItem'에 두 번 쓰고'before '와'after'리스트에 하나를 더합니다. – freakish