0

我想将每个对象从我的类转换为 observablearray,

我的模型是这样的:

public class Project
    {
        public string Soid { get; set; }
        public DateTime StartDate { get; set; }
        public DateTime? EndDate { get; set; }
        public string ProjectTitle { get; set; }

        private List<SelectedMembersForTestimonialsModel> _selectedMembersForProject;

        public List<SelectedMembersForTestimonialsModel> SelectedMembersForProject
        {
            internal set { _selectedMembersForProject = value; }
            get { return _selectedMembersForProject ?? (_selectedMembersForProject = new List<SelectedMembersForTestimonialsModel>()); }
        }
}

要将整个类转换为 observablearray,我试过这样:

var RatingAndTestimonials = function () {
    //Make the self as 'this' reference
    var self = this;

    self.projects = ko.observableArray([]);

Load Data from server to self.projects
//Function to Read All Modules datas
    function GetRatingandTestimonialsData(module) {
        $.ajax({
            type: "POST",
            url: "Home.aspx/GetRatingandTestimonialsInfos",
            data: "{module : '" + module + "'}",
            dataType: "json",
            contentType: "application/json",
            success: function (response) {
                self.PageLoading = ko.observable("none");
                $.each(response.d, function (i, data) {
                    self.projects(data.Projects);
                                    });
            }

        });
    }

将每个属性从项目转换为 observablearry,(特别是称为 :SelectedMembersForProject 的嵌套列表

我使用 ko.mapping 写了以下内容

var rt = new RatingAndTestimonials(); 
ko.applyBindings(ko.mapping.fromJS(rt));

但它不起作用,任何人都可以解决我的问题吗?

4

2 回答 2

1

对于我正在处理的屏幕,我首先将模型传递给我的 .cshtml 视图,因此:

@model Your.Namespace.Project

然后,在<script>.cshtml 视图上

    // serialize model to json
    var data = @Html.Raw(new System.Web.Script.Serialization.JavaScriptSerializer().Serialize(Model));

    // "Project" being the name of the knockout VM
    var vm = new Project(data);
    ko.applyBindings(vm);

    // definition of project knockout VM
    function Project(data) {
        // Data
        var self = this;
        ko.mapping.fromJS(data, {}, self);
    }

现在你所有的属性都是可观察的,你的列表是可观察的数组

于 2013-06-05T20:18:08.253 回答
0

虽然您还没有说到底出了什么问题,但您并没有将每个项目添加到视图模型的数组中,而是将属性设置为该项目。您需要使用 push 将每个项目添加到数组中:

$.each(response.d, function (i, data) {
    self.projects.push(data.Projects);
});
于 2013-06-05T12:47:12.743 回答