【问题标题】:Knockout.js Bind a observable with single json objectKnockout.js 用单个 json 对象绑定 observable
【发布时间】:2015-04-17 08:04:11
【问题描述】:

我正在尝试对具有单个 json 对象的 observable 进行数据绑定。我可以用 ko.observablearray 做到这一点,foreach 没问题,但不知道如何用 observale 来做到这一点

这是我的视图模型

var ViewModel = function () {
    var self = this;
    self.job = ko.observable();
}

self.job 已填充来自 api 调用的 json 对象,这可以正常工作,但我不确定如何将数据绑定到 html。我试过foreach

<p data-bind="foreach: job">
Name: <span data-bind="text: jobslist.Name"> </span>
Description: <span data-bind="text: jobslist.Description"> </span>
</p>

它不会给出任何错误,只是空白

{
    "JobID":1,
    "JobsListID":1,
    "BookingID":2,
    "TimeAllowed":20,
    "TimeTaken":22,
    "Comments":"Some comments",
    "Status":"complete",
    "Notes":null,
    "TimeStarted":"2014-11-04T09:00:00",
    "Difficulty":1,
    "CompleteDate":"2014-11-04T09:22:00",
    "booking":null,
    "jobs_mechanics":[],
    "jobslist": {
        "JobsListID":1,
        "JobCategoryID":1,
        "Description":"Change Tyres                  ",
        "Name":"Tyres",
        "jobs":[],
        "jobscategory":null,
        "model_jobslist":[]
     },
     "timessheets":[]
}

【问题讨论】:

  • 您能否添加一个示例,来自服务的 JSON 是什么样子的?
  • 试试&lt;p data-bind="with: job"&gt;
  • 恐怕运气不好

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


【解决方案1】:

您应该能够使用with 绑定获得结果。下面是假设您使用局部变量而不是 Web 服务调用的代码:

var data = {
    "JobID":1,
    "JobsListID":1,
    "BookingID":2,
    "TimeAllowed":20,
    "TimeTaken":22,
    "Comments":"Some comments",
    "Status":"complete",
    "Notes":null,
    "TimeStarted":"2014-11-04T09:00:00",
    "Difficulty":1,
    "CompleteDate":"2014-11-04T09:22:00",
    "booking":null,
    "jobs_mechanics":[],
    "jobslist": {
        "JobsListID":1,
        "JobCategoryID":1,
        "Description":"Change Tyres                  ",
        "Name":"Tyres",
        "jobs":[],
        "jobscategory":null,
        "model_jobslist":[]
     }, 
     "timessheets":[]
};
var ViewModel = function () {
    var self = this;
    self.job = ko.observable(data);
}
var vm = new ViewModel();
ko.applyBindings(vm);

还有 HTML:

<p data-bind="with: job().jobslist">
Name: <span data-bind="text: Name"> </span>
Description: <span data-bind="text: Description"> </span>
</p>

这是jsFiddle

【讨论】:

  • 嘿,只是想知道如果 htm 处于局部视图中,这可以正常工作吗?
  • 如果所有必需的脚本都准备好了,使用局部视图应该没有问题,除非你想在这里做一些不寻常的事情
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-31
  • 2012-04-08
  • 2017-11-12
  • 1970-01-01
  • 1970-01-01
  • 2012-05-20
相关资源
最近更新 更多