javascript - 行属性的文本区域 knockout attr 绑定(bind)不起作用

标签 javascript knockout.js

我想通过knockout 2.3.0改变texterea的高度

我将 texterea 的值绑定(bind)到“FileData”可观察字段 并希望将 texterea rows 属性更改为“FileData”中的行数

值绑定(bind)工作正常,但 attr 不起作用

var self = this;
self.FileData = ko.observable("");

self.lineBreakCount = function(str) { 
  /* counts \n */ 
  try { 
    return ((str.match(/[^\n]*\n[^\n]*/gi).length)) + 1; 
  } catch (e) {
    return 0; 
  } 
}

self.buttonClick = function () {
$.get(url, {  })
.success(function (serverData) { self.FileData(serverData);})
}
<button type="button" data-bind="click: buttonClick">Click Me</button>
<textarea readonly="readonly" data-bind="value: FileData, attr: { 'rows': lineBreakCount(FileData)}"></textarea>

最佳答案

您的lineBreakCount预计 string ,但你传递给它的是 observable 包含 string

要解决此问题,请在绑定(bind) ( lineBreakCount(FileData()) ) 或方法 ( str().match ) 中解开您的可观察对象

var VM = function() {
  var self = this;
  self.FileData = ko.observable("");

  self.lineBreakCount = function(str) {
    /* counts \n */
    try {
      return ((str.match(/[^\n]*\n[^\n]*/gi).length)) + 1;
    } catch (e) {
      return 0;
    }
  }

  self.buttonClick = function() {};
};

ko.applyBindings(new VM());
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.4.2/knockout-min.js"></script>
<button type="button" data-bind="click: buttonClick">Click Me</button>
<textarea data-bind="textInput: FileData, attr: { 'rows': lineBreakCount(FileData())}"></textarea>

关于javascript - 行属性的文本区域 knockout attr 绑定(bind)不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51928189/

相关文章:

Javascript单页应用导览工具

javascript - Mongo 客户端无法访问带有下划线前缀的集合

javascript - 与 Redux 的异步操作

javascript - 清除 Knockout 中所有可观察到的绑定(bind)

javascript - 手动强制 ko.observable 以在页面加载时通知订阅

javascript - JavaScript 的 Fetch API 的 "same-origin"和 "no-cors"有什么区别?

javascript - 如何防止 Cognos 中的页面刷新?

javascript - "data-bind"是一个严格的只能 knockout 的属性吗?

javascript - 将对象推送到 observableArray

knockout.js - 如何使用 knockout 部分绑定(bind) html 元素