首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用Knockout连接一个可观察阵列中的所有项目?

如何使用Knockout连接一个可观察阵列中的所有项目?
EN

Stack Overflow用户
提问于 2016-02-08 12:30:29
回答 2查看 276关注 0票数 1

我有个折页对象:

代码语言:javascript
复制
var Transaction = function (data) {
    this.ID = ko.observable(data.transaction.ID);
    this.number = ko.observable(data.transaction.number);
    this.userID = ko.observable(data.transaction.userID);
    this.password = ko.observable(data.transaction.password);

    this.Properties = ko.observableArray(data.Property);
}

属性可观察数组如下(在JSON中):

代码语言:javascript
复制
[{"address1":"111 Broadway","city":"Brooklyn","state":"NY","zip":null},
{"address1":"222 Broadway","city":"Brooklyn","state":"NY","zip":null}]

在我的HTML中,有这样的内容:

代码语言:javascript
复制
<span>PROPERTY</span>
<span data-bind="foreach: Properties">
<span data-bind="text: address1"></span>
<span data-bind="text: city"></span>
span data-bind="text: state"></span>
<span data-bind="text: zip"></span>
</span>

在浏览器中,它看起来如下:

代码语言:javascript
复制
PROPERTY 
111 Broadway 
Brooklyn 
NY 
222 Broadway
Brooklyn 
NY

我想让它看起来像:

代码语言:javascript
复制
111 Broadway, Brooklyn, NY 
222 Broadway, Brooklyn, NY

有什么建议吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-02-08 20:38:56

您可以将Transaction原型中的计算属性创建为Properties列表视图,这将简化与其关联的Properties标记。

代码语言:javascript
复制
this.propertyView = ko.pureComputed(function() {
  return this.Properties().map(function(prop) {
    var singleProp = '';
    for (var p in prop)
      if (prop[p])
        singleProp += prop[p] + ', ';
    return singleProp.slice(0,-2);
  });
}, this);
代码语言:javascript
复制
<span>PROPERTIES</span>
<!-- ko foreach: propertyView -->
<p data-bind="text: $data"></p>
<!-- /ko -->
票数 1
EN

Stack Overflow用户

发布于 2016-02-08 14:44:48

您应该将这些“前端”属性封装在块级元素中,如pdiv标记,例如:

代码语言:javascript
复制
var Transaction = function (data) {
    this.ID = ko.observable(data.transaction.ID);
    this.number = ko.observable(data.transaction.number);
    this.userID = ko.observable(data.transaction.userID);
    this.password = ko.observable(data.transaction.password);
    this.Properties = ko.observableArray(data.properties);
};

var vm = new Transaction({ 
  transaction: { ID: 1, number: 2,  userID: 3, password: 'secret' },
  properties: [{"address1":"111 Broadway","city":"Brooklyn","state":"NY","zip":null},
               {"address1":"222 Broadway","city":"Brooklyn","state":"NY","zip":null}]
});

ko.applyBindings(vm);
代码语言:javascript
复制
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.2.0/knockout-min.js"></script>

<h1>
  <span data-bind="text: ID"></span> -
  <span data-bind="text: number"></span> -
  <span data-bind="text: userID"></span> -
  <span data-bind="text: password"></span>
</h1>
<span>PROPERTIES</span>
<!-- ko foreach: Properties -->
<p>
  <span data-bind="text: address1"></span>
  <span data-bind="text: city"></span>
  <span data-bind="text: state"></span>
  <span data-bind="text: zip"></span>
</p>
<!-- /ko -->

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35269742

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档