2012-03-02 11 views
2

私はMVVMパターンとノックアウトJSを使用してこれを行うための正しいルートをダウンつもりならば、これは私の現在のシナリオで思ったんだけど:ノックアウトJSのアドバイス

ASCX: 
<asp:TextBox runat="server" ID="TextboxDescription" Width="300" ClientIDMode="Static" /> 

JS: 
$('#TextboxDescription').limitCharacters({ 
       limit: 1000, 
       alertClass: 'error', 
       id_result: 'description_limit', 
       align: 'right' 
}); 

だから、あなたが見る、私がしています。私はこのような何かを見て、私のコードを変更したい私は MVVMが入ってくると思いますどこで常に「TextboxDescription」と呼ばれているテキストボックスに依存する:

ASCX: 
<asp:TextBox runat="server" ID="TextboxDescription" Width="300" ClientIDMode="Static" data-bind="{ not even sure what goes here, no Knockout load event? }" /> 

JS: 
function ViewModel() { 
    setLimit = function(limit, alert, id, align) { 
      // code here to call limitCharacters on sender(?!) 
    } 
}; 

ko.applyBindings(new ViewModel()); 

私は、カスタムバインディングについて読んでてきましたノックアウトでは、私がしなければならないルートですこれが私のウィジェットと結びつくためには下に行くのですか?

答えて

2

あなたは正しい方向にあります。ここでは、あなたが望む(テストされていない)ものを行うべき基本的なカスタムバインディングの例を示します。

ko.bindingHandlers.limitCharacters = { 
    init: function(element, valueAccessor) { 
     // this gets called at the start when the element is first bound 
     // use it to bind event handlers widgets etc 
     var $element = $(element), 
      limit = ko.utils.unwrapObservable(valueAccessor()); // this gets the value of the object on the rhs of the binding 

     $element.limitCharacters({ 
       limit: limit, 
       alertClass: 'error', 
       id_result: 'description_limit', 
       align: 'right' 
     }); 
    } 
} 

することはあなたの今(unwrapObservable呼び出しに注意してください)制限はなく、単純に1000の観察可能な可能性が現時点で

<asp:TextBox runat="server" ID="TextboxDescription" Width="300" ClientIDMode="Static" data-bind="limitCharacters: 1000" /> 

ようになりますバインディング。バインディングをオブザーバブルの値に反応させたい場合は、バインドされているオブザーバブルに変更が発生したときに呼び出されるバインディングに更新関数を追加できます。ここで、プラグインを再初期化したり、設定を調整したりすることができます。このことができます

希望、

+0

アメージング答えは、そんなにありがとう - 本当にノックアウトの私の実装:) –

+0

問題なしで私を一緒に支援するつもり。ノックアウトで幸運を祈る、それは本当に私がJavascriptを書く方法を変更しました。 – madcapnmckay

+0

私は同じことを見ることができます!あなたが時間を持っているならもう1つのこと、どのように2つの変数を介してpasaですか?例と同じですが、ちょうどjsonスタイルの配列を使っていますか? {limit:1000、alertClass: 'alert'}のようなものですか? –

関連する問題