2

テンプレートとして HotTowel を使用して mvc アプリケーションを構築しています (デュランダル、ノックアウト、ブリーズなど)。アプリケーションはまだ準備ができていませんが、順調に進んでいます :)。1 つの機能の途中で、javascript 関数への動的呼び出しを作成する必要があります。ハード コード値を使用した呼び出しは次のようになります。

<a href="#" id="openreport"                                                 
onclick="showReport('@Url.Action("Index","Report", new { Id= 9, languageId = 2})');">Show  
report</a>

上記の呼び出しは正常に機能します。ノックアウトjsを使用してonclickイベントを文字列プロパティにバインドしようとすると、問題が発生します。このようなもの:

<a href="#" id="openReport" data-bind="onclick: $root.reportUrl()"  > 
 Show report                                                

report url は観察可能な変数です。ここにタイプスクリプトコード:

export var reportUrl =<any> ko.observable();

export var expandRow = function (myObjectComeFromATable) {

    var urlAction = '@Url.Action("Index", "Report", new { Id= ID_TO_REPLACE, languageId = LANG_TO_REPLACE }) ';
    var url = "showReport('"+urlAction+"');";
    reportUrl(url);   
};

更新 引用符の使用は問題ありません。ノックアウト変数の値は、前に示したハードコード値と同じです。レイアウトのシンタキシスに問題があるのでしょうか?

4

1 に答える 1

0

オブザーバブルでコードを評価しようとしていますか? うまくいかないと思います。関数で手動で評価を行うことができます。しかし、それは良い解決策ではないと思います。

クリック時に常に「showReport」を呼び出す場合は、eval は必要ありません。呼び出す URL を含むプロパティをモデルに用意し、コールバック関数で showReport(yourUrl) を実行するだけです。

クリックして呼び出している関数が変更された場合、モデルで呼び出す関数への参照を保持できます。そのようなもの(ただし、よりクリーン):

var model = function() {
    var _this = this;
    this.function1 = function() {
         alert('hello');   
    }
    this.function2 = function() {
         alert('world');   
    }
    this.run = function() {
         _this.current(); 
    }
    this.change = function() {
         _this.current = _this.function2;   
    }

    this.current = this.function1;
}
ko.applyBindings(new model());


<a href="#" data-bind="click: run">Click</a>
<a href="#" data-bind="click: change">Switch</a>

ここを参照してください:http://jsfiddle.net/pp2QA/2/

于 2013-07-10T06:08:17.693 に答える