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);
                                    });
            }

        });
    }

各プロパティを project から 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 に答える