0

我有这个 Viewmodel 可以从 WCF 服务加载用户及其社交图列表。用户显示正确,但没有显示社交图条目。我检查了服务和返回的 json,一切似乎都很好。

我应该将我的模型更改为不同的东西还是我在 ViewModel 中加载东西的方式?谢谢

$(document).ready(function () {

var viewModel = {

    users: ko.observableArray([]),              

    loadUsers: function () {
        OData.read("Service_UserProfile/", function (data) {

            viewModel.users.removeAll();
            $.each(data.results, function (index, item) {                    
                var socialgraphs = viewModel.loadSocialGraph();
                var user = new UserProfileModel(item, socialgraphs);                   
                viewModel.users.push(user);                   
            });
        });
    },

    loadSocialGraph: function () {

        var result = new Array();
        // user id will be loaded dynamically in later steps
        OData.read("/Service_UserProfile(1)/Socialgraph/", function (data) {

            $.each(data.results, function (index, item) {                   
                result.push(new SocialGraph(item));                    
           });
        });        
        return result;
    }
};

ko.applyBindings(viewModel);   
viewModel.loadUsers();

});

该模型

function UserProfileModel(item,socialgraphs) {
    this.Id = ko.observable(item.Id),
    this.Nickname = ko.observable(item.Nickname),
    this.socialgraphs = ko.observableArray(socialgraphs)
};

function SocialGraph(item) {
    this.Id = ko.observable(item.Id),
    this.StartTime = ko.observable(item.StartTime),
    this.Latitude = ko.observable(item.Latitude),
    this.Longitude = ko.observable(item.Longitude)
};

风景

<table>
    <thead>
        <tr>
            <th>User ID</th>
            <th>Nickname
            </th>
            <th>Social Graph
            </th>
        </tr>
    </thead>
    <tbody data-bind="foreach: users">
        <tr>
            <td data-bind="text: Id"></td>
            <td data-bind="text: Nickname"></td>
            <td>
                <ul data-bind="foreach: socialgraphs">
                    <li data-bind="text: Id"></li>
                    <li data-bind="dateString: StartTime"></li>
                    <li data-bind="text: Latitude"></li>
                    <li data-bind="text: Longitude"></li>
                </ul>
            </td>
        </tr>

    </tbody>

</table>
4

1 回答 1

0

你应该改变:

loadSocialGraph: function () {

    var result = ko.observableArray();
    // user id will be loaded dynamically in later steps
    OData.read("/Service_UserProfile(1)/Socialgraph/", function (data) {

        $.each(data.results, function (index, item) {                   
            result.push(new SocialGraph(item));                    
       });
    });        
    return result;
}

function UserProfileModel(item,socialgraphs) {
    this.Id = ko.observable(item.Id),
    this.Nickname = ko.observable(item.Nickname),
    this.socialgraphs = socialgraphs
};

原因:在 右边部分
的行socialgraphs 是 []。this.socialgraphs = ko.observableArray(socialgraphs)
只有在某个时间间隔后,它才会被值填充。而且由于它不是可观察的数组,因此淘汰赛不会注意到某些项目被推入其中。即它将保持为空。

于 2013-04-25T13:55:12.607 回答