0

次のコードとデータがあります

{
    "Job": {
        "JobName": null,
        "JobNumber": 13,
        "JobSize": 0,
        "Status": "Finished",
        "DateCreated": "/Date(1312551946280)/"
    },
    "Values": [
        {
            "Id": "8401",
            "Status": "Good",
            "JobNumber": 13
        },
        {
            "Id": "8402",
            "Status": "Bad",
            "JobNumber": 13
        }
    ]
}

function JobViewModel() {
    var self = this;

    self.jobs = ko.observableArray();
    self.selectedJob = ko.observable();
    self.history = ko.observableArray();

    var app = Sammy(function () {
        this.get('#/:jobNumber', function (context) {
            $.get('/home/GetJobInfo/' + context.params.jobNumber, {}, self.selectedJob);
        });

    });

    jQuery(function () {
        app.run();
    });
}

JSON データが戻ってくるのを見ることができるので、$.get が機能していることがわかります。また、$.get の 3 番目のパラメーターで関数を使用してデータを確認しました。

その関数を self.selectedJob プロパティに置き換えると、値が入力されないのはなぜですか?

ありがとう

更新:これが私のHTMLです

<!DOCTYPE html>

<html>
<head>
    <link href="~/Content/main.css" rel="stylesheet" />
    <title>Sentinel Web Data</title>
</head>
    <body>
        <div id="sidebar">
            <ul data-bind="foreach: jobs">
                <li><a data-bind="text: $data.JobName, attr: { href: '#/' + $data.JobNumber}"></a></li>
            </ul>
        </div>
        <div id="job">
            <span data-bind="text: JobNumber"></span>
        </div>
        <div class="clear"></div>
        <div id="history"  data-bind="with: history"></div>
        <script src="~/Scripts/knockout-2.2.1.js"></script>
        <script src="~/Scripts/jquery-1.4.4.min.js"></script>
        <script src="~/Scripts/sammy-0.7.4.min.js"></script>
        <script src="~/Scripts/JobViewModel.js"></script>
        <script>
            ko.applyBindings(new JobViewModel());
        </script>
    </body>
</html>

コンソールで get を見て、self.selectedJob.Job を監視すると、「未定義」と表示されます

4

2 に答える 2

0

これを行うことでこれを機能させることができましたが、元のコードが機能しなかった理由がわかりません:

$.get('/home/GetJobInfo/' + context.params.jobNumber, {}, function (data) {
    self.selectedJob(data);
});
于 2013-02-12T11:18:36.853 に答える
0

コンソールに関して、あなたはそれを間違って見ています。選択したジョブ名を表示するには、次を使用する必要があります。

var vm = new JobViewModel();
ko.applyBindings(vm);

次に、コンソールで:

vm.selectedJob().Job

HTMLへのバインディングに関しては、選択したジョブにバインドしていません:

<div id="job" data-bind="with: selectedJob">
    <span data-bind="text: JobNumber"></span>
</div>
于 2013-02-12T10:07:57.460 に答える