1
define(['plugins/http', 'durandal/app', 'knockout'], function (http, app, ko) {

    return {
        displayName: 'Flickr',

        Value: ko.observableArray([]),

        js : $.getJSON("http://localhost:XXXXX/api/File/Get", function (result) {

            self = this;
            self.Value = result;
            console.log(JSON.stringify(self.Value));
//[{"ID":1,"Name":"a","Type":"text","Size":123},{"ID":1,"Name":"a","Type":"text","Size":123},{"ID":1,"Name":"a","Type":"text","Size":123}]

        }),

我在我的 Drundal SPA 应用程序(flick.js)中有上面的代码,我的(flick.html)有下面的代码

<ul class="thumbnails" data-bind="foreach: Value">
            <li data-bind=" text: Name ">

            </li>
        </ul>

但是当我执行此代码时,我没有在我的 html 文件中获取名称列表

出了什么问题任何人都可以帮助我

4

2 回答 2

2

你这里有两个问题。observableArray第一个 - 你不正确地赋值,observableArray是一个函数,所以你必须用()它来赋值。第二个你在自我中有错误的上下文。将 self 的初始化移动到js函数的顶部:

define(['plugins/http', 'durandal/app', 'knockout'], function (http, app, ko) {

    return {
        displayName: 'Flickr',

        Value: ko.observableArray([]),

        js : function() {
              var self = this;
              $.getJSON("http://localhost:XXXXX/api/File/Get", function (result) {

                  self.Value(result);
                 console.log(JSON.stringify(self.Value()));
              })
        }}
于 2013-09-17T06:36:27.000 回答
1

您必须设置可观察的值,而不是重新创建它。您还可以创建一个保留“自我”引用的对象。

define(['plugins/http', 'durandal/app', 'knockout'], function (http, app, ko) {
    var VM = function () {
        self = this;
        self.displayName = 'Flickr';
        self.Value = ko.observableArray([]);
        self.js = $.getJSON("http://localhost:XXXXX/api/File/Get", function (result) {
            self.Value(result);
        });
    };
    return new VM();
}),

我希望它有所帮助。

于 2013-09-17T06:43:56.447 回答