2013-02-12 5 views
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(); 
    }); 
} 

Я знаю, что $ .get работает, потому что я могу видеть данные в формате JSON, возвращаясь, и я использовал функцию в 3-й параметр в $ .get, чтобы увидеть данные.

Когда я заменяю эту функцию свойством self.selectedJob, почему она не заполняется?

Благодаря

UPDATE: Вот мой 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> 

При взгляде на Садись в консоли и имея часы на self.selectedJob.Job я получаю "неопределенные"

+0

Можете ли вы разместить свой HTML-код? А также часть JS, которую вы называете 'ko.applyBindings'? – nemesv

+0

@nemesv Обновлено с помощью HTML – Jon

ответ

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> 
+0

Почему это работает в этой демонстрации? Нет плагина сопоставления - http://learn.knockoutjs.com/WebmailExampleStandalone.html – Jon

+0

Хороший вопрос! Должен признаться, я понятия не имею, что вы можете это сделать. Тогда я подумаю о том, что происходит. –

+0

Он должен просто заполнить наблюдаемый объект данных из вызова JSON. Что заставляет вас думать, что он не работает? Если вы можете опубликовать html, это может помочь. –

0

мне удалось получить эту работу, делая это, однако я не уверен, почему мой исходный код не работает:

$.get('/home/GetJobInfo/' + context.params.jobNumber, {}, function (data) { 
    self.selectedJob(data); 
}); 
Смежные вопросы