淘汰赛没有约束力

时间:2013-09-17 06:26:39

标签: javascript knockout.js durandal

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文件中获取名称列表

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

2 个答案:

答案 0 :(得分: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()));
              })
        }}

答案 1 :(得分: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();
}),

我希望它有所帮助。