2013-06-27 5 views
3

Как мы должны объявлять viewmodels в машинописном тексте?Нокаут Viewmodel в машинописном тексте

Как классы, модули или как var/functions?

В definitelytyped примерах они используют вар и функции в основном https://github.com/borisyankov/DefinitelyTyped/blob/master/knockout/tests/knockout-tests.ts

EDIT: Спасибо Basarat - в этом редактировать Выражаю вопрос: Если я использую класс, я предполагаю, что это должно быть так:

class Player 
{ 
    min:KnockoutObservable<number>; 
    constructor(min:number=0) 
    { 
     this.min=ko.observable(min); 
    } 
} 

НО КАК следует вычислить, чтобы определить?

ответ

5

Вы можете использовать вычисленный с обобщениями (последний машинопись 0,9), просто определить тип в декларации и в конструкторе присвоит значение результат звонка на ko.computed:

export class Inbox extends vm.BriskIdeaViewModel { 

    public rapidEntryText = ko.observable<string>(); 
    public todosActive: KnockoutComputed<Array<ITodo>>; 

    constructor() { 
     super(); 
     this.todosActive = ko.computed(() => { 
      return _.filter(this.dataContext.todos(), x => !x.isDone()); 
     }); 
    } 
} 
+0

Почему вы используете public и почему() в конце на rapidEntryText = ko.observable ()? (Я знаю, что наблюдаемые функции - это функции, но VS подчеркивает это как ошибку). –

+0

Публика - это только личное предпочтение - она ​​такая же, как и без публики (машинопись по умолчанию общедоступна, если вы не сделаете ее закрытой). – nihique

+0

и rapidEntryText = ko.observable (); имеет значение по умолчанию - вы можете просто отделить это присваивание конструктору (например, this.todosActive), но это намного проще. – nihique

3

Я предпочитаю использовать классы, так как они действительно инкапсулируют функциональность очень хорошо.

например. простой класс:

class Player { 
    min = ko.observable(0); 
    sec = ko.observable(0); 
    mil = ko.observable(0); 
} 

И потом просто применить:

var vm = new Player(); 
    ko.applyBindings(vm); 
+1

Я ждал, пока кто-то (кроме меня: P) не будет моделировать ko наблюдаемые с помощью дженериков - они, похоже, сделаны специально для него. Вы пробовали это вообще? – JcFx

+0

@JcFx Nope. Я действительно делал значительную родовую работу: https://github.com/basarat/typescript-collections Я * очень * предпочитаю AngularJS над нокаутом. Все нокауты, которые я знаю, теперь год назад :) AngularJS теперь для меня вторая натура :) – basarat

+0

Не увлечь свой ответ, но, надеюсь, добавить его полезность, у кого-то есть: http://typescript.codeplex.com/discussions/441964 – JcFx

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