繁体   English   中英

未定义的属性kickout.js + mvc

[英]Undefined property knockout.js + mvc

我有一个masterDetails视图,其中填充了数据库中的一些数据(可以很好地填充)。 我在主详细信息视图中添加了一个按钮,以向我的工作流程添加一个步骤。

我的视图模型:

/// <reference path="_references.js" />
var viewModel = function (data) {
    var self = this;
    self.SelectedWorkflow = ko.observable({
        Steps: ko.observableArray([]),
        Name: ko.observable("")
    });
    self.Workflows = ko.observableArray(data);

    self.addStep = function() {

        self.Steps.push(new Step(SelectedWorkflow, "Assignment here", "01/01/2014", "dd:mm:ss", "mail"));
    };
};

function Step(workflow,assignment, enddate, reminder, mailaddresses, type) {
    var self = this;
    self.Workflow = workflow;
    self.StepNumber = 0;
    self.Assignment = assignment;
    self.Enddate = enddate;
    self.Reminder = reminder;
    self.MailAddresses = mailaddresses;
    self.Type = type;

};
/// <reference path="workflowdetails-vm.js" />
$(document).ready(function () {
    $.ajax({
        url: "/WorkflowDetails/Index/",
        type: "POST",
        data: {},
        success: function (data) {
            var workflowlist = ko.mapping.fromJS(data.Workflows);
            vm = new viewModel(workflowlist);
            ko.applyBindings(vm);
        }
    });
    $(".right-aligned-section").hide();
});
$(document).delegate(".show-details", "click", function () {
    $(".right-aligned-section").fadeIn();
    var workflow = ko.dataFor(this);
    vm.SelectedWorkflow(workflow);
});

我的观点:

<div class="left-aligned-section">
    <ul data-bind="foreach: Workflows()">
        <li>
            <div class="workflow-item-border">
                <div>
                    <label data-bind="text: Name"></label>
                </div>
                <div>
                    <label data-bind="text: StartDate"></label>
                </div>
                <div>
                    <a href="#" class="show-details">Show Details</a>
                </div>
            </div>
        </li>
    </ul>
</div> 

<div class="right-aligned-section" data-bind="with: SelectedWorkflow">
    <div class="steps-header">
        <div class="left-aligned-div"><strong>Steps for&nbsp;</strong></div>
        <div class="left-aligned-div" data-bind="text: Name"></div>
    </div>
    <button data-bind="click: addStep">add step</button>
    <ul data-bind="foreach: Steps">
        <li>

            <div class="step-item-border">
                <div>
                    <div class="step-label">Stepnumber: </div>
                    <div style="font-weight: bold" data-bind="text: StepNumber"></div>
                </div>
                <div>
                    <div class="step-label">Assignment: </div>
                    <div style="font-weight: bold" data-bind="text: Assignment"></div>
                </div>
                <div>
                    <div class="step-label">Mails: </div>
                    <div style="font-weight: bold" data-bind="text: MailAddresses"></div>
                </div>
                <div>
                    <div class="step-label">End Date: </div>
                    <div style="font-weight: bold" data-bind="text: Enddate"></div>
                </div>
                <div>
                    <div class="step-label">Type: </div>
                    <div style="font-weight: bold" data-bind="text: Type"></div>
                </div>
            </div>
        </li>
    </ul>
</div> 

当我按下按钮时-什么也没发生。 我收到的错误是:

ReferenceError:未定义步骤

我知道这意味着什么,但是我对Web开发的熟练程度不足以真正解决它。 请帮忙。

好像您在Steps.push....之前忘记了this

编辑:我对点击处理程序功能做了一些进一步的更改

var viewModel = function (data) {
    this.SelectedWorkflow = ko.observable({
        Steps: ko.observableArray([]),
        Name: ko.observable("")
    });
    this.Workflows = ko.observableArray(data);

    this.addStep = function (selectedWorkflow) { // the current context is passed in from the click data-bind

        selectedWorkflow.Steps.push(new Step(selectedWorkflow, "Assignment here", "01/01/2014", "dd:mm:ss", "mail"));
    }
}

编辑:固定代码

可能这会工作:

var viewModel = {};

viewModel.SelectedWorkflow = {
    Steps: ko.observableArray([]),
    Name: ko.observable("")
};

viewModel.Workflows = ko.observableArray(data);

viewModel.addStep = function () {
    viewModel.SelectedWorkflow.Steps.push(
        new Step(SelectedWorkflow, "Assignment here", "01/01/2014", "dd:mm:ss", "mail"));
    }
}

您忘记了SelectedWorkflow.Steps我认为的步骤...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM