1

意見:

<td style="white-space: nowrap;">
   <img data-bind="attr: { onclick: PlaySounds }" src="/Images/audioGreen.png" alt="Pronounce word" title="Pronounce word" style="cursor: pointer" />
   <a data-bind="attr: { href: GoogleQuery }" target="_blank">
      <img src="/Images/googleIcon.png" alt="Google Search" title="Google Search" style="cursor: pointer" />
   </a>
</td>

ノックアウト ビュー モデル:

function DictionaryEntry() {
   var self = this;
   self.Simplified = ko.observable("");
   self.Traditional = ko.observable("");
   self.Phonetic = ko.observable("");
   self.Definition = ko.observable("");

   self.GoogleQuery = ko.computed(function () {
       return "http://www.google.com/search?q=" + self.Simplified();
   }, self);

   self.PlaySounds = ko.computed(function () {
       return "playSounds('" + self.Phonetic() + "')";
   }, self);
}

「attr」バインディングに関する情報: 「http://knockoutjs.com/documentation/attr-binding.html

エラーの詳細:

Microsoft JScript ランタイム エラー: バインドを解析できません。メッセージ: ReferenceError: 'PlaySounds' は定義されていません。バインディング値: attr: { onclick: PlaySounds }

どこが間違っているのかわかりません。可能であれば、ko.computed 値を使用せずに直接バインドするとボーナスになります。どちらの方法でも解決策をいただければ幸いです。

4

3 に答える 3

5

attr関数をクリックにバインドするためにバインディングを使用する必要はありません。これには、Knockoutclickバインディングを使用する必要があります。

<img data-bind="click: playSounds" src="/Images/audioGreen.png"
     alt="Pronounce word" title="Pronounce word" style="cursor: pointer" />
于 2012-04-30T05:28:28.707 に答える
3

私は自分の質問に答えています...少し遅れていますが、それが他の誰かに役立つことを願っています:

それを機能させるために私がしたことは、次を使用することでした:click: $root.PlaySoundsそして私のメインのViewModelに関数を持っています..DictionaryEntry(子)モデルではありません..このように:

self.PlaySounds = function (entry) {
                playSounds(entry.Phonetic);
                return false;
            };

それはうまくいきました。

于 2012-09-24T08:22:24.480 に答える
0

必要なバインディングはclick: function() { playSounds(Phonetic()) }. 特定のエラーを実際にデバッグしてほしい場合は、コードの例を提供してください (jsfiddle など)。

于 2012-04-30T22:56:22.613 に答える