2015-09-08 3 views
1

Я новичок в Knockout.js, и я думаю, что это всего лишь вопрос нахождения правильного синтаксиса.Knockout.js использует циклическую переменную в привязке foreach

Я хочу использовать переменную looped привязки foreach для создания компонента. Что-то вроде этого:

<ul data-bind="foreach: packages"> 
    <li> 

     <my-widget params='package'></my-widget> 

     <!-- I have tried but dont' work: 
     <my-widget params='this'></my-widget> 
     <my-widget params='$parent'></my-widget> 
     <my-widget params='$parenteContext'></my-widget> 
     --> 

    </li> 
</ul> 

Есть ли простой способ? Может ли with привязка может быть полезна?

EDIT:

Вот простой jsfiddle, чтобы продемонстрировать это: http://jsfiddle.net/n194o9dp/3/

Я ожидал увидеть список уль с повторением:

  • аа
  • бб
  • cc
+0

http://jsfiddle.net/n194o9dp/3/ это должно работать .. дайте мне знать – nkint

+0

Извините, что я начал с существующего jsfiddle, возможно, случилось что-то странное. – nkint

+0

Пожалуйста, проверьте правильную jsfiddle и сообщите мне, правильный. Нет «nombre», no

nkint

ответ

1

Я думаю, вы ищете $data который содержит текущий данные объекта повторяется.

Более подробную информацию можно founnd в docs for bindingContext properties


Edit: Так вы получаете ваш params все перепутали. Так же, как связывание, вам нужно передать его property:value - так что если вы хотите, чтобы передать ему весь внешний объект, который вы могли бы сделать:

<my-widget params='data:$data'></my-widget> 

Это не необходимости называться data это может быть

<my-widget params='foo:$data'></my-widget> 

Единственное различие заключается в том, как вы получите доступ к нему внутри виджета. Кроме того, представляет контекст привязки, для доступа к фактическим данным вам необходимо использовать свойство data, которое очень запутывается.В общем, это будет работать, если вы делаете это так:

<my-widget params='data:$data'></my-widget> 

А потом внутри виджета:

.... 
viewModel: function(params) { 
    this.name = params.data.name 
}, 
.... 

http://jsfiddle.net/n194o9dp/5/

Лучшим вариантом, на мой взгляд, должен пройти то, что вам действительно нужен ваш виджет:

<my-widget params='name:name'></my-widget> 

и получить к нему доступ непосредственно:

.... 
viewModel: function(params) { 
    this.name = params.name 
}, 
.... 
+0

ОК спасибо, круто Я не знал, но .. '' prints undefined, если я консолью его в конструкторе компонента – nkint

+0

Можете ли вы включить некоторые разметки/код/​​viewmodel в вашем вопросе, это поможет ответить на вопрос. Самый лучший пример jsfiddle/stacksnippet. – Jamiec

+0

изменить: добавлен js fiddle – nkint

0

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

<ul data-bind="foreach: {data: packages, as:package}"> 
    <li> 

    <div data-bind='component: { 
     name: "my-widget", 
     params: { package: package } 
    }'></div> 

    </li> 
</ul> 

Более подробную информации о компонентах Связывание here.

+0

изменить: добавлен js скрипка – nkint

+0

@nkint Я обновил скрипку. http://jsfiddle.net/newuserjs/n194o9dp/4/ – Dandy

Смежные вопросы