как привязать что-то к функции в Knockout.js

Я использую Knockout.js и upshot.js, чтобы получить список элементов от контроллера API на сервере. Это в основном моя модель просмотра:

self.templatesDataSource = upshot.dataSources.Templates.refresh();
self.templates = self.templatesDataSource.getEntities();

Привязка к свойствам работает просто отлично:

<div data-bind="foreach: templates">
    <a href="#" data-bind="text: Title"></a><br />
</div>

Но, допустим, я хочу, чтобы в тексте отображалось не только название, но и сочетание названия и какого-то другого значения? Допустим, я хочу Title + ' ' + Id. Основываясь на «примере 4» из здесь, я думаю, что смогу сделать что-то вроде этого:

<div data-bind="foreach: templates">
    <a href="#" data-bind="text: function(item){return item.Title + ' ' + item.Id; }"></a><br />
</div>

Однако я вижу текст функции (function(item){...etc) вместо результата. Мне также понадобится эта функция для создания правильного href для ссылки. Как я могу это сделать?


person Alex Polkhovsky    schedule 03.05.2012    source источник


Ответы (1)


вы можете просто написать свое заявление прямо как:

data-bind="text: Title + " " + Id"

Если ваши свойства являются наблюдаемыми, вы должны сделать:

data-bind="text: Title() + " " + Id()"

Для привязки к href вы должны сделать:

data-bind="attr: { href: Url }"

Другой вариант при вычислении значения — использовать вычисляемый наблюдаемый объект для представления значения.

person RP Niemeyer    schedule 03.05.2012
comment
data-bind=text: Title + ' ' + Id привел к получению длинной сжатой функции javascript в качестве вывода. Однако использование data-bind=text: Title() + ' ' + Id() дало желаемый результат. Независимо от того, что upshot.js возвращает в качестве источника данных, действительно можно наблюдать. Спасибо!!! - person Alex Polkhovsky; 03.05.2012