Список Дюрандала с композицией (ASP .NET MVC)

Я пытаюсь использовать Durandal для создания списка данных. Поскольку эти данные будут обновляться в диалоговом окне, мне нужен элемент списка для представления модели представления. Для этого вид композиции кажется подходящим, но я должен что-то упустить, как это сделать. Примечание: я использую ASP .NET MVC, поэтому мой путь немного отличается. Однако на данный момент я не вижу никаких веб-запросов на мой взгляд, как и отладчик; линии в моей модели просмотра ударили.

Вот код: HTML:

<tbody data-bind="foreach: workItems">
    <!-- ko compose: {model: 'viewmodels/project/workItem', view: 'views/project/workitem'} -->
    <!-- /ko -->
</tbody>

Вот JS для модели представления, предназначенной для представления каждой строки в списке:

define(['knockout'], function(ko) {
    var vm = function () {
        var that = this;
        this.activate = function(ctx) {
            debugger;
        };
    };

    return vm;
});

Вот код, который обрабатывает запрос GET, возвращающий данные:

this.activate = function (ctx) {
    var q = null;

    if (ctx == undefined) {
        q = that._getCurrent();
    } else {
        q = that._getPath(ctx);
    }

    q.then(function (response) {
        that.workItems(response);
        app.trigger('viewmodel:loadingComplete');
    });
};

Я попытался использовать system.acquire, чтобы добавить виртуальные машины в мой наблюдаемый массив, но это не дало никаких результатов. Я думал, что мне нужна композиция, поэтому я получаю привязку к огню для каждой строки. (это может быть неправильно). Я действительно ищу пример этой работы. Совершенно озадачен тем, что мне не удалось найти что-либо на SO или Google.

заранее спасибо

2 ответа

Решение

1) Убедитесь, что workItems действительно содержит данные. Используйте простой div foreach для вывода результатов.

2) Есть ли причина, по которой вы не используете шаблон Singleton?

3) Верните обещание от активации, чтобы убедиться, что данные загружены перед запуском композиции.

define(['knockout'], function (ko) {

var items = ko.observableArray([]);

var activate = function() {
    console.log("calling composelist:activate");
    items.push({name:"Hello"});
    items.push({name:"world"});
};

return  {
    activate: activate,
    items: items
    };
});

Вы пытаетесь загрузить другой v/vm на основе параметра URL? Если так, то почему бы не использовать базовую оболочку / маршруты?

Можете ли вы представить свой код?

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