首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >敲除js foreach循环上下文

敲除js foreach循环上下文
EN

Stack Overflow用户
提问于 2016-02-23 20:05:35
回答 2查看 628关注 0票数 0

A有模板:

代码语言:javascript
运行
复制
<table data-bind="foreach: {data: messages, as: 'message'}">
    <tr>   <td data-bind="text: $root.go"></td>   </tr>
</table>

我的js:

代码语言:javascript
运行
复制
function CreateViewModel() {
    var self = this;
    this.go = ko.computed(function() {
        return 'not really important what here for now';
    });
}

ko.applyBindings( new MessagesVM );

运行时“go”中的上下文是“窗口”,我希望它是当前项。有可能吗?如果我将tmpl行更改为"<td data-bind="text: go"></td>“,则没有定义错误'go‘。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-02-23 20:10:07

运行时“go”中的上下文是“窗口”,我希望它是当前项。有可能吗?

我不认为你能用电脑,不。如果您使它成为一个简单的函数,您可以:data-bind="text: $root.go.call(message)" (一般说来,它将是.call($data),但因为您在foreach中将它命名):

代码语言:javascript
运行
复制
function MessagesVM() {
  var self = this;
  this.messages = ko.observableArray([
    "Message 1",
    "Message 2"
  ]);
  this.go = function() {
    return 'this is: "' + this + '"';
  };
}

ko.applyBindings(new MessagesVM);
代码语言:javascript
运行
复制
<table data-bind="foreach: {data: messages, as: 'message'}">
  <tr>
    <td data-bind="text: $root.go.call(message)"></td>
  </tr>
</table>
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.3.0/knockout-min.js"></script>

或者,如果您希望使用计算的某些功能,但对单个项进行操作,我可能会使用绑定处理程序:

代码语言:javascript
运行
复制
ko.bindingHandlers.specialText = {
  update: function(element, valueAccessor) {
    var value = ko.unwrap(valueAccessor());
    element.innerHTML = "'value' is " + value;
  }
};
function MessagesVM() {
  var self = this;
  this.messages = ko.observableArray([
    "Message 1",
    "Message 2"
  ]);
}

ko.applyBindings(new MessagesVM);
代码语言:javascript
运行
复制
<table data-bind="foreach: {data: messages, as: 'message'}">
  <tr>
    <td data-bind="specialText: message"></td>
  </tr>
</table>
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.3.0/knockout-min.js"></script>

票数 1
EN

Stack Overflow用户

发布于 2016-02-23 20:23:13

将其转换为函数并传递上下文。作为计算,它有一个缓存的值,因此不能依赖于上下文.

代码语言:javascript
运行
复制
function CreateViewModel() {
  var self = this;
  this.messages = [
    'one',
    'two'
  ];
  this.go = function(data) {
    var context = data;
    return 'Context:' + context;
  };
}

ko.applyBindings(new CreateViewModel());
代码语言:javascript
运行
复制
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.2.0/knockout-min.js"></script>
<table data-bind="foreach: {data: messages, as: 'message'}">
  <tr>
    <td data-bind="text: $root.go(message)"></td>
  </tr>
</table>

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

https://stackoverflow.com/questions/35587127

复制
相关文章

相似问题

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