1

このようなビューモデルがあるとしましょう

var viewModel = {
    "Dtos": [{
        "Id": 1,
        "Number": 100,
        "Description": "some description",
        "Total": 200},
    {
        "Id": 2,
        "Number": 200,
        "Description": "some description",
        "Total": 400}]
};

viewModel.EditUrl = "http://someUrl.com?Id=${Id}";

次のテンプレートでEditUrlをレンダリングして、テンプレートを含めるとそれがテンプレートとして処理されるようにするにはどうすればよいですか。つまり、ビューモデルにある文字列をテンプレート内のテンプレートに変換するにはどうすればよいですか。

<script id="rowTemplate" type="text/x-jquery-tmpl">
    <tr>
        <td><a href="${EditUrl}">Edit</a></td>
            <td>${Id}</td>
    </tr>
</script>

Knockout.jsがこれのバインドを処理するため、Idは適切にレンダリングされます。

4

1 に答える 1

0

viewModel.EditUrl を次のような関数にするのはどうですか:

viewModel.EditUrl = function(id) { return "http://someUrl.com?Id=" + id; }

次に、テンプレートは次のようになります。

<script id="rowTemplate" type="text/x-jquery-tmpl">
    <tr>
        <td><a href="${viewModel.EditUrl(Id)}">Edit</a></td>
            <td>${Id}</td>
    </tr>
</script>

のように: http://jsfiddle.net/rniemeyer/CegbS/

それ以外の場合は、ノックアウトを使用しているため、EditUrl を配列内の各アイテムに依存するオブザーバブルにすることを検討できます。次に、実際に EditUrl だけにバインドできます。上記とほとんど同じですが、関数だけが配列内の各項目にあります。教えていただければ、その例もお見せできます。

于 2011-02-14T15:12:33.127 に答える