Я борюсь с тем, что, как я думаю, является действительно глупой проблемой. Я выполняю итерацию через коллекцию в Knockout.JS, используя «foreach», и вам нужно создать ссылку для каждого элемента, используя переменные в коллекции.Смешивание нокаутных и бритвенных переменных
Проблема в том, что мой url генерируется «на лету» с использованием переменных из модели представления, и мне нужно объединить их с переменными в коллекции Knockout.
Вот мой блок, содержащий цикл нокаута.
<div data-bind="foreach: pagedList" class="span8" style="border-bottom: 1px solid #0094ff;">
<div style="cursor: pointer;">
<p data-bind="text: hotelId"></p>
<p data-bind="text: name"></p>
<p data-bind="text: hotelRating"></p>
<p data-bind="text: propertyCategory"></p>
</div>
</div>
В идеале я хочу, чтобы добавить ссылку на родительском DIV с помощью метода «OnClick =" window.location =». Я попытался с помощью Action.Link и добавления в переменном Knockout через конкатенацию, как это ;
<div style="cursor: pointer;" onclick="window.location="@Url.Action("Index", "Hotel", new { regionId = Model.region.regionId, regionName = HttpUtility.UrlPathEncode(Model.region.regionNameLong.ToString().Replace(",","")).Replace("%20","-"), hotelId = " + hotelID() + ", hotelName = HttpUtility.UrlPathEncode(Convert.ToString(" + name() + ").Replace(",","")).Replace("%20","-") })"> </div>
Но это дает «Объект не инстанцированный ошибку» Во-вторых, я попытался с помощью нокаут первых, через «данных-затруднительное =" Attr:». метод, как это;
<a href="someurl" data-bind="attr: { href: '/Region/' + '@Model.region.regionId ' + '/' + '@HttpUtility.UrlPathEncode(Model.region.regionNameLong.ToString().Replace(",","")).Replace("%20","-") ' + '/' + hotelID() + '/' + '@HttpUtility.UrlPathEncode(Convert.ToString(" + name() + ").Replace(",","")).Replace("%20","-")' }, text: hotelId()"></a>
Снова нет кубиков.
Я знаю, что это смешивает парадигмы на стороне клиента и на стороне сервера, но не может думать о другом способе без прерывания нокаута.
Есть ли у кого-нибудь опыт с этим?
Спасибо за это, он отлично работал для меня. Я просто устанавливаю переменную 'urlPart', используя Razor, затем использую как показано. Единственное предостережение для меня было в том, что мне нужно было использовать «ko.utils.unwrapObservable» для каждого значения элемента в специальном обработчике привязки. Не знаю, почему, но без него это не сработает. – PizzaTheHut
Добро пожаловать. Рад, что это сработало для вас, и вы были достаточно знакомы с w.Knockout, чтобы развернуть ... так как ваш код использует реальные наблюдаемые свойства, где мой упрощенный пример этого не сделал. Счастливое кодирование. –