нокаут js: параметры в шаблонных привязках - PullRequest
2 голосов
/ 14 декабря 2011

Я пытаюсь шаблонировать некоторые компоненты, часто используемые в моем проекте. Чтобы опустить введенную избыточность в html-контенте. Однако я не понял, возможно ли это сделать.

У меня есть шаблон как:

<script type="text/x-jquery-tmpl" id="somefieldtemplate" >  
<input  name=" Prefix" type="text" data-bind="value: ${ $item.fieldName}SomeField" /> 
   ..... mor contents ... 
</script>

Параметр, привязанный к компоненту ввода, должен быть настраиваемым, так как кто-то может видеть это через параметры шаблона, поэтому у меня есть запись типа

<div data-bind="template: { name: 'somefieldtemplate', 
         templateOptions: 
             { fieldName:'somefield', displayName:'somefieldlabel' } }">

Сообщение об ошибке в журнале моей консоли:

SyntaxError: Unexpected token {

Я сузил проблему до того факта, что если я удаляю $item.fieldName с его значением, это работает.

Кто-нибудь может найти просветляющее решение этой проблемы?

Редактировать:

В качестве информации я сейчас использую knockout.js в версии: knockout-latest

Ответы [ 3 ]

1 голос
/ 14 декабря 2011

У меня была та же проблема, и после многих испытаний я решил ее, перейдя на нокаут 1.3 beta (теперь он в RC), в котором не используются внешние движки шаблонов. Он также не поддерживает templateOptions, но это не проблема. Я только что создал пользовательские данные для шаблона, которые содержат основные данные как свойство плюс другие свойства, которые содержат материал, который я бы передал в templateOptions в 1.2. Я передал его в параметре data, и все работало нормально.

0 голосов
/ 15 декабря 2011

К сожалению, мне нужно ответить на это сам. Но мне удалось заставить его работать. Благодаря совету RP Niemeyer.

Для всех, кто заинтересован в этом:

Наблюдаемые генерируются динамически в модели someModel с помощью метода компонентов регистра. Это наблюдаемые всегда имеют имена вроде <field>SomeField

Шаблон:

<script type="text/x-jquery-tmpl" id="somefieldtemplate" >  
<input  name="${$item.fieldName}Prefix" type="text" data-bind="value: someModel[$item.fieldName + 'SomeField']" /> 
   ..... more contents ... 
</script>

Template-Переплет:

<div data-bind="template: { name: 'somefieldtemplate', 
         templateOptions: 
             { fieldName:'somefield', displayName:'somefieldlabel' } }">
0 голосов
/ 14 декабря 2011

Попробуйте

data-bind="value: ${fieldName} + 'SomeField'"
...