5

私はノックアウトについて頭を悩ませ始めており、domを操作したりアニメーションを起動したりするコードをviewmodelに書くのが正しい場合などです。例として、私はdivへの参照を渡すこのバインディングを持っています。 tr をクリック

<tr data-bind="click: function(data, event){$parent.Select('#PanelWrapper', $data)}">

私のビューモデルには

self.Select = function (panel, e) {
        console.log(ko.toJS(e));
        if(self.SelectedEmployee() === e)return;

        self.$PanelWrapper = $(panel);
        var $Bottom = parseInt(self.$PanelWrapper.css("bottom"));

        if($Bottom === 0){
            self.$PanelWrapper.animate({
                bottom:"-95"
            }, 500, function(){
                self.SelectedEmployee(e);
                self.Editable(new Employee(ko.toJS(e)));
            }).animate({
                bottom:"0"
            }, 500);
        }else{
            self.SelectedEmployee(e);
            self.Editable(new Employee(ko.toJS(e)));

            self.$PanelWrapper.animate({
                bottom:"0"
            }, 500);       
        }
    };

これが有効で、vmmv の方法論に従っているかどうか疑問に思っています。どんな助けでもいただければ幸いです

4

2 に答える 2

8

いいえ、ビューモデル内で dom を操作するのは得策ではありません。MVVM の全体的な概念は、UI のビューとデータ/動作部分を分離することです。

カスタム バインディング ハンドラーを使用するか、ビューモデルの外部でこれらのエフェクト/コントロール (これが正確にはわかりません) を作成することもできます。ビューモデルは、ビュー、つまりデータとそのデータに対するコマンドのみをモデル化する必要があります。

于 2013-07-29T16:06:29.183 に答える