DurandalJS создает привязку, не передавая активациюData в дочернюю модель представления

В DurandalJS я создал Activator в своей ViewModel, который будет привязан к Compose Binding в представлении. Тривиальный пример:

var ViewModel = function(){
    this.childView = activator.create();
    this.activate = function(whyIsThisUndefined){ console.error('Well?' + whyIsThisUndefined); }
}


<div data-bind="compose: { model : theModel, activationData: [1]}"></div>

Что я делаю неправильно? Почему Durandal не передает параметры активации?


person Oliver Kane    schedule 18.02.2014    source источник
comment
Проверьте этот пост — pwkad.wordpress.com/2014/02 /02/лучшие детали о Дюрандале   -  person PW Kad    schedule 19.02.2014
comment
Эй, PW, Кэд, я вообще-то только что прочитал эту статью. Я знаю об этом синтаксисе и нашел несколько ссылок на него в своем поиске в Google, но даже при использовании жестко закодированных значений мои методы активации ничего не передают. У вас есть рабочий пример, который я мог видеть? Какую версию Дюрандаля вы используете? (у меня 2.0.1).   -  person Oliver Kane    schedule 19.02.2014
comment
2.0.1 в этом образце. Можете ли вы изменить свои данные активации на активациюData: { data: 'Эй!!!!' } а затем console.log(whyIsThisUndefined) и посмотреть, есть ли свойство данных для этого объекта?   -  person PW Kad    schedule 19.02.2014
comment
Независимо от того, что я поместил в качестве значения активацииДанные, в функцию активации ничего не передается. Например: если бы я вызвал console.log(аргументы), их бы не было. Нет ошибки. Он ведет себя так, как будто активацияДанные не распознана или введена с ошибкой. Подобно тому, как будет связан ttext. Нет подходящей привязки, поэтому она просто молча игнорируется.   -  person Oliver Kane    schedule 19.02.2014
comment
Я знаю, что у Райнера здесь есть рабочие примеры почти всего — dfiddle.github.io/dFiddle-2.0/ #extras — возможно, вы можете найти один из них при активации, который поможет вам в отладке, но я думаю, что ваша функция активации может не получать переданные данные, потому что это синглтон, но опять же, это предположение.   -  person PW Kad    schedule 19.02.2014
comment
Оооо... если это синглтон, он не передаст эти параметры? Любопытный. Это дает мне то, с чем можно работать. theModel в приведенном выше примере — это не конструктор, а экземпляр. Я бы поставил деньги, которые заставят его вести себя как синглтон. Хотя экземпляров несколько. Сейчас проверю.   -  person Oliver Kane    schedule 19.02.2014
comment
Вот оно! Как бы я хотел знать это несколько часов назад. Итак... сегодня я узнал, что DurandalJS не передает параметры активации в vm singletons. Если вы дадите ответ, я вам поверю, добрый сэр.   -  person Oliver Kane    schedule 19.02.2014


Ответы (1)


Когда вы используете Singleton для своих моделей представления, я не думаю, что параметры передаются функции активации каждый последующий раз. Передайте свои данные как таковые -

activationData: { data: 'Hey!!!!' } 

И убедитесь, что вы создаете активацию на прототипе и каждый раз создаете новый экземпляр модели представления (или модуля AMD).

person PW Kad    schedule 18.02.2014
comment
О добавлении в прототип активации()... почему? До сих пор я без проблем прикреплял это к вновь созданному экземпляру. Это было бы тривиальным изменением, но я хотел бы понять, почему это делается. - person Oliver Kane; 19.02.2014
comment
Если вы используете функцию-конструктор, скажем, ctor = function(){}, вы должны поместить activate в ctor.prototype, чтобы ее можно было использовать в нескольких экземплярах. Однако нет причин использовать его на синглтоне, вероятно, опечатка. - person RainerAtSpirit; 19.02.2014
comment
Прочитайте вне контекста, я имел в виду, когда вы не используете синглтон и используете функцию конструктора, прикрепите активацию к прототипу. - person PW Kad; 19.02.2014