簡體   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