2013-03-08 4 views
1

Я использую нокаут-2.2.0.js. У меня есть следующие модели:Проблема с вычисленным наблюдаемым

function Person(name, age, city) 
{ 
this.Name = ko.observable(name); 
this.Age = ko.observable(age); 
this.City = ko.observable(city); 

ko.computed(function(){ 

    //Is there any way to execute this section whenever Name, Age, City any 
    //of this observable changes without including this.Name, this.Age and 
    //this.City inside it 

}, this).extend({ throttle: 500 }); 
} 

Я знаю, что я спрашиваю, немного странно, но я хочу знать, есть ли способ сделать это?

+3

Короткий ответ: Нет. Чего вы пытаетесь достичь, может быть, есть разные способы решить проблему, а не взломать накопленный? – nemesv

+0

Я думаю, вам просто нужно подписаться на модель. – Ohgodwhy

+0

yaa subscribe - хороший момент, но я хочу использовать удлинители дросселей, можем ли мы использовать это в подписке? потому что я не хочу получать живые изменения моих наблюдаемых – gaurav

ответ

1

Самый простой способ сделать это, чтобы назвать ko.toJS(this) в вашей вычислен. Обычно это используется для создания «чистого» объекта из модели представления. В рамках построения этого объекта он разворачивает все наблюдаемые (что создает зависимости). Таким образом, ваш расчет будет срабатывать всякий раз, когда какая-либо из зависимостей изменится.

Это основа вещей, как «грязный флаг»: http://www.knockmeout.net/2011/05/creating-smart-dirty-flag-in-knockoutjs.html

Вы можете использовать throttle с вашим вычисленным таким образом.

3

использовать пользовательский переплет. пользовательская привязка имеет внутри себя функцию «обновления». И что функция обновления дозвонились автоматически, когда любое наблюдаемое значение переоденусь

http://knockoutjs.com/documentation/custom-bindings.html

+0

спасибо sahil. это действительно помогает. – Sudarshan

Смежные вопросы