jQuery: шаблон из строкового вопроса - PullRequest
1 голос
/ 14 февраля 2011

Допустим, у меня есть такая модель представления

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 отрисовывается правильно.

1 Ответ

0 голосов
/ 14 февраля 2011

Как насчет того, чтобы сделать 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. Почти так же, как и выше, только функция будет на каждом элементе в массиве. Дайте мне знать, и я могу показать вам пример этого.

...