订阅后Knockout.js textarea绑定未更新(在组合框中选择项目)

时间:2014-02-05 23:09:47

标签: javascript knockout.js asp.net-web-api

我对此很陌生,但是无法弄清楚我做错了什么...在订阅发生后,文本区域没有获得新值(在组合框中选择项目)我从我的所有请求中获取数据...我只是无法弄清楚我是否在我的viewmodel中的'subscribe'的成功部分做了什么或者我的绑定有什么问题...任何帮助很感激...

<div style="margin-top: 100px; width: 80%; margin-left: auto; margin-right: auto;">

<h2>Workflows</h2>

<select data-bind="options: Workflows, optionsText: 'Name', value: Workflow, optionsCaption: 'Choose Workflow...'">
</select>
<input data-bind="click: put" id="RunWorkflow" type="button" value="Run Workflow" />
<textarea data-bind="value: Moo" type="text" style="background-color: beige; color: black; display: block; margin-top: 20px; height: 400px; width: 80%;">
</textarea>

<script type="text/javascript">

var WorkflowViewModel = function ()
{

    self = this;
    self.Name = ko.observable("Who");
    self.Moo = ko.observable("George");

    var Workflow =
    {
        Name: self.Name,
        Moo: self.Moo
    };

    self.Workflow = ko.observable();
    self.Workflows = ko.observableArray();

    $(document).ready(function ()
    {
        $.ajax({
            url: '@Url.Action("Get", "Workflow", new { httproute = "api" })',
            cache: false,
            type: 'GET',
            contentType: 'application/json; charset=utf-8',
            data: {},
            success: function (data)
            {
                self.Workflows(data);
            }
        });
    });

    self.Workflow.subscribe(function (WorkFlow)
    {

        $.ajax({
            url: '@Url.Action("Get", "Workflow", new { httproute = "api" })',
            cache: false,
            type: 'GET',
            contentType: 'application/json; charset=utf-8',
            data: { name: WorkFlow.Name },
            success: function (data)
            {
                self.Moo = data.Moo;
                self.Name = data.Name;
            }
        });
    });

};

var workflowViewModel = new WorkflowViewModel();
ko.applyBindings(workflowViewModel);

1 个答案:

答案 0 :(得分:1)

您没有正确设置observable的值。改变这个:

self.Moo = data.Moo;
self.Name = data.Name;

到此:

self.Moo(data.Moo);
self.Name(data.Name);