CANJS3 несколько экземпляров компонента

С CanJS (3) я пытаюсь вставить дважды один и тот же компонент, но с другим поведением. "Родительский" сташ выглядит так:

<div class="container-fluid contents">
  <...>
     <my-component someParameters="value1"></my-component>
  </...>
  <...>
      <my-component someParameters="value2"></my-component>
  </...>
</div>

Благодаря привязке к потомку, параметр получает в дочернем viewModel, который является простым DefineMap.

Дочерний компонент прост:

export default Component.extend({
  tag: 'my-component',
  viewModel: myviewmodel (a DefinedMap, with a can-connect attribute, and some others attributes),
  view: view (some stache file),
  events: {
    'inserted': function(el) {
      console.log('inserted my-component...');
    },
  }
});

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

Но потом пришли неприятности. Оба дочерних компонента имеют соединение (в viewmodel), и я ожидаю, что затем подключиться к тому же IP, но подписаться на другой канал.

Похоже, что CanJS не создает две разные модели представления в фактах, поэтому я получаю один и тот же экземпляр моего объекта can-connect, что делает работу невозможной...

Если у кого-то есть идея, как разместить два компонента на одной странице, но с двумя разными областями действия, я буду рад прочитать.

РЕДАКТИРОВАТЬ: реальная проблема заключается в неуникальности "модели" (т.е. объект viewmodel.connect)

1 ответ

Решение

Решение:

Объект can-connect должен быть в замыкании:

var behaviors = function() {return connect([
    someBehavior,
    anotherBehavior
  ],
  {
    url: {
      getListData: "GET myURL"
    }
  })
};

И DefineMap должен быть таким:

var MyMap = DefineMap.extend({
  connection: {value: behaviors},
  parameters: ...
}

Некоторое интересное чтение: значение атрибута документа

Другие вопросы по тегам