нокаут с динамическими моделями - PullRequest
2 голосов
/ 04 ноября 2011

На веб-сайтах содержится масса информации о том, как обрабатывать динамические представления (с помощью вызовов ajax) с помощью Knockout, но есть ли лучший метод для моделей динамического представления?приложение, которое отображает (через ajax) различные типы форм (с различными полями ввода) на основе роли, пользовательских настроек, контекстов и т. д. Я бы не только использовал шаблоны для каждой формы, но я хотел бы сделать то же самое для модели представления, поскольку каждая модель представления может иметь много очень разных свойств, и было бы непрактично иметь одну массивную модель представления для каждого возможного шаблона.

Я немного новичок с ко, и его нельзя использовать таким образом.Любой совет очень ценится.

Ответы [ 2 ]

6 голосов
/ 04 ноября 2011

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

Вот действительно базовый пример определения «модельных» объектов, которые имеют шаблон и связанные данные.

function Model(key, template, data) {
   this.key = key;
   this.template = ko.observable(template);
   this.data = data; 
}

var viewModel = {
   models: ko.observableArray([
       new Model("user", "userTmpl", { first: "Bob", last: "Smith" }),
       new Model("item", "itemTmpl", { name: "MyItem", description: "Here are some details" })
   ]),
   selectedModel: ko.observable()
};

ko.applyBindings(viewModel);

Тогда вы можете использовать его как:

<select data-bind="options: models, optionsText: 'key', optionsCaption: 'select a model...', value: selectedModel"></select>

<hr />

<div data-bind="with: selectedModel">
    <div data-bind="template: { name: template(), data: data }"></div>    
</div>


<script id="userTmpl" type="text/html">
    <span data-bind="text: last"></span>, <span data-bind="text: first"></span>
</script>

<script id="itemTmpl" type="text/html">
    <h3 data-bind="text: name"></h3>
    <div data-bind="text: description"></div>
</script>

http://jsfiddle.net/rniemeyer/29kWf/

Очевидно, вы вряд ли будете связывать выбор модели в выборке, но это помогает показать, как она может работать. Вместо массива ваши модели могут быть объектами с именами свойств, соответствующими ключу.

"Данные" в объектах "модель" будут вашими моделями подвидов.

0 голосов
/ 05 октября 2012

У меня такая же проблема.

Попробуйте Пространства имен нокаута

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...