0

サブスクリプションがある選択コントロールがあります。剣道スタイルを適用しない場合、コントロールは期待どおりに動作し、サブスクリプション コードは 1 回起動し、onBlur またはその他の理由で再起動しません。kendoDropDownList を適用すると、サブスクリプションの動作が一貫して不安定になります。

$("select").kendoDropDownList();

不安定な動作は値の選択であり、サブスクリプションが起動します。別のコントロールをクリックすると、サブスクリプション イベントが再び発生し、選択コントロールが値を未変更として表示している場合でも、値は未定義になります。その後の選択では、期待どおりにサブスクリプションが起動されます。剣道を使用している場合、選択コントロールで下/上矢印を使用しても起動しません。

<select id="newExperienceFrequency"   data-bind="value: frequency, options: $root.controls.frequencies,  optionsText: 'name', optionsValue: 'id', optionsCaption: 'Select', event: { mouseover: mouseoverFrequency, mouseout: mouseoffFrequency }" class="select frequencyTip" title="foo"></select>


    self.proficiency.subscribe(function () {
        self.proficiencyId = self.proficiency();
        console.log('proficiency subscribed: ' + self.proficiency());
        my.setCounterHint($("#newExperienceFrequency").val(), self.proficiency());

        var tip = "Don't just list those skills your strongest in. It's just as important to add new skills you are aquiring!";
        var result = $.grep(my.ajaxData.member.Proficiencies, function (e) { return e.Id == self.proficiency(); });
        if (result.length == 0) {
            // not found
        } else if (result.length == 1) {
            // access the foo property using result[0].foo
            tip = result[0].Name + ':\nAutonomy: ' + result[0].Autonomy + '\nContext: ' + result[0].nContext + '\nKnowledge: ' + result[0].Knowledge + '\nWorkmanship: ' + result[0].Workmanship;
        } else {
            // multiple items found
        }
        $(".proficiencyTip").attr('title', tip).attr('alt', tip);
        $(".proficiencyQuestionMark").fadeIn('slow');
    }); 

これは既知の問題ですか、それとも単に何か間違っているのでしょうか? Knockout で Kendo を使おうとすることで、より多くの仕事を自分で行うことができますか? 剣道を使ってノックアウトを落としたら、これらの問題は解決しますか?

4

1 に答える 1

0

私はノックアウトほど KendoUI に精通していません。しかし、私が推測しなければならないのは、剣道が要素で変更されたイベントをトリガーしており、ノックアウトが通常よりも多く発生しているということです.

サブスクリプションで参照するのではなく、サブスクリプションに新しい値のパラメーターを与えることをお勧めしますself.proficiency()。次に、値がサブスクリプションで定義されているかどうかを確認できます。

また、ビューモデルで jquery を実行しないようにする方法を再評価することをお勧めします。jquery を実行する必要がある場合は、カスタム アニメーションまたは新しいバインディングを作成します。おそらく、Ui を VM の別のプロパティにバインドし、view/vm を切り離すことができます。

たとえば、クエスチョンマーク要素はブール値のオブザーバブルにバインドできます。カスタム バインディングを fadeVisible にします。ドキュメントにそのサンプルがあったことを漠然と覚えています。作るのは難しくありません。(ヒント: http://knockoutjs.com/examples/animatedTransitions.html )

self.proficiency.subscribe(function(val) {
    if (typeof(val) === 'undefined')) {
        return;
    }
});
于 2012-12-28T16:17:59.250 に答える