Tuhaf bir durum var. Temel olarak, DOM öğesinin yeni değerine animasyon uygulamak için kullanılan iki özel bağlarım var. Bunlar sırasıyla genişlik ve doğru değerleri canlandıran aWidth ve aRight'dır.KnockoutJS özel bağlarım neden tetikleniyor?
<div class='classname' data-bind="aRight: right, aWidth: containerWidth, style: { zIndex: zindex, left: (left() + 'px'), height: (containerHeight() + 'px') }">
... ve özel bağlamaları şuna benzer:
böyle bağlamaları uyguladık biz daha gözlemlenebilir bir başka değiştirdiğinizde
ko.bindingHandlers.aWidth =
{
update: function (element, valueAccessor, allBindingsAccessor, context)
{
// Get the value accessor
var value = valueAccessor();
// Get the new width and the duration of the animation
var newWidth = ko.utils.unwrapObservable(value);
var duration = 500;
$(element).animate({ width: newWidth }, duration, "swing");
}
};
ko.bindingHandlers.aRight =
{
update: function (element, valueAccessor, allBindingsAccessor, context)
{
// Get the value accessor
var value = valueAccessor();
// Get the new width and the duration of the animation
var newRight = ko.utils.unwrapObservable(value);
var duration = 500;
$(element).animate({ right: newRight }, duration, "swing");
console.log("aRight Called: newRight - " + newRight + ", duration - " + duration);
}
};
Yani sorun etrafında geliyor iki özel gözlemlenebilir gözlemcim, örneğin zindex. Biz gözlemlenebilir zIndex değiştirirseniz
, değer DOM doğru güncellenir, ama nedense benim aright da tetiklendiğinde bağlanma! ...
ben gönderiminden yok benim aYüksek özel bağlama var, bu yüzden kesinlikle bir bağımlılık olamaz?
Ayrıca aWidth bağlanma da tetiklendiğinde aRight bağlanma da tetikleniyor, bu da biraz garip!
Bu konuda herhangi bir fikri olan var mı?
Çok teşekkürler!
Andy.
Bu yangına bağlayıcı benim aright özel nedenleri indeksi, günceller görünümü modelinin bir parçası olan
Güncelleme (bu arada çok psudo-kodu!):
var page = function()
{
this.zindex = ko.observable(0);
this.right = ko.observable(0);
// and other observables....
}
var viewModel = function()
{
var pages = ko.oberservableArray();
// populate the pages array etc...
this.someMethod = function()
{
// Do some stuff...
this.anotherMethod();
// Do some other stuff
}
.bind(this);
this.anotherMethod() = function
{
var pageCount = this.pages().length;
for (var pageNum = 0; pageNum < pageCount; pageNum++)
{
var page = this.pages()[pageNum];
page.zindex(/* a different value */); // This is what causes my aRight binding to fire...
}
}
.bind(this);
}
Güncelleme
burada sadece bir yazı okumakdeyiş: Ayrıca
, bir eğer başka yanı tetiklenir aynı veri-bağlama özelliğinde bağlayıcı, yine güncelleme fonksiyonu çalıştırmak zorunda kalacak bağlayıcı.
bu nedir görüyorum başka veri bağlama özniteliği tetiklenir bağlanma benim özel tetiklediği bağlanmanın olduğu anlamına mı geliyor (sadece çok o zIndex ben değişim görüyoruz ilk belki olur) ? Mı bu değil biraz yanlış/garip? ...
Ben hemen hemen özetliyor benim sorunum düşünüyorum basit bir keman var
Güncelleme. Özel bağlamanın güncellenmesine neden olacağından, aynı veri bağlama özniteliğinde herhangi bir bağlanma gibi görünüyor!
Hmmm ... Ben elle değeri aslında değişip değişmediğini ya da olmamak gibi bağlanma benim özel kontrol ederek etrafında çalışmak zorunda kalacağım !!Bu bir bağlanma gerçek noktasını yenilemez mi ??? http://groups.google.com/group/knockoutjs/browse_thread/thread/d2290d96e33f1d5a
: gibi görünürdü? Animasyon yapmak yerine sadece genişliği/yüksekliği doğrudan değiştirirseniz ne olur? –
İyi soru ... bana bir saniye verin ... :) – Andy
@Alex Key, nah, $ (element) .css ("right", newRight + "px") kullanarak; en azından yardım etmedi. İndeks güncellendiğinde hala tetikleniyor! Öneri için teşekkürler! – Andy