使用键值对中的方法截断字符串

Using a method inside a key value pair to truncate a string

我在我的 javascript 中使用 Lodash 和 jQuery 库,我试图弄清楚如何调用一个方法来截断所使用的键值对的结果在我的 .html 代码中创建一个列表。 html 如下所示:

 <div class="slide-in-panel">
        <ul class="list-unstyled slide-in-menu-navigation" data-bind="foreach: __plugins">
            <li class="btn-block">
                <div class="btn btn-default btn-block" data-bind="click: $parent.showPlugin, tooltip: 'Shoebox.Panel'">
                    <span data-bind="text: config.title"></span>
                    <em class="webgis-Icon webgis-Cross slide-in-menu-remove-shoebox-button"
                        data-bind="click: $parent.showRemoveConfirmBox, tooltip: 'Shoebox.RemoveShoebox'">
                    </em>
                </div>
            </li>
        </ul>
 </div>

关键部分是data-bind="text: config.title"部分。这将使用该按钮的名称填充列表。 config.title 是在下面的 javascript 文件中创建的。我的目标是将 .truncate() 之类的方法应用于 javascript 中的 config.title 部分,以保持正在填充的任何名称都不会太长。我该怎么做?

 return this.__backendShoeboxClient.createShoebox(this.__shoeboxName()).then((function(_this) {
      return function(shoebox) {
        return $when.join(shoebox.getName(), shoebox.getId(), shoebox.getUserName()).then(function(arg) {
          var shoeboxId, shoeboxName, userName;
          shoeboxName = arg[0], shoeboxId = arg[1], userName = arg[2];
          return _this.__shoeboxContentFactory.create({
            shoeboxId: shoeboxId,
            shoeboxName: shoeboxName,
            userName: userName
          }).then(function(arg1) {
            var activeShoeboxHandle, config, shoeboxContent;
            shoeboxContent = arg1.shoeboxContent, activeShoeboxHandle = arg1.activeShoeboxHandle;
            _this.__activeShoeboxHandleMain.loadModel(activeShoeboxHandle);
            config = {
              plugin: shoeboxContent,
              title: shoeboxName,
              userName: userName,
              id: shoeboxId,
              handle: activeShoeboxHandle,
              icon: ""
            };
            _this.add(config, null, null);
            activeShoeboxHandle.loadModel(shoebox);
            _this.__shoeboxName.useDefaultValue();
            return _this.__shoeboxName.clearError();
          });
        })["catch"](function(error) {
          __logger__.error("Error while calling request " + error);
          return $when.reject(new Error("Error while calling request. " + error));
        });
      };
    })(this));
  };

我也在尝试像这样使用敲除 style 绑定,但没有成功:

<span data-bind="style: { textOverflow: ellipsis }, text: config.title"></span>

应该这样做: 像这样使用截断函数:config.title = _.truncate(config.title, {'length': maxLength});

return this.__backendShoeboxClient.createShoebox(this.__shoeboxName()).then((function(_this) {
  return function(shoebox) {
    return $when.join(shoebox.getName(), shoebox.getId(), shoebox.getUserName()).then(function(arg) {
      var shoeboxId, shoeboxName, userName;
      shoeboxName = arg[0], shoeboxId = arg[1], userName = arg[2];
      return _this.__shoeboxContentFactory.create({
        shoeboxId: shoeboxId,
        shoeboxName: shoeboxName,
        userName: userName
      }).then(function(arg1) {
        var activeShoeboxHandle, config, shoeboxContent;
        shoeboxContent = arg1.shoeboxContent, activeShoeboxHandle = arg1.activeShoeboxHandle;
        _this.__activeShoeboxHandleMain.loadModel(activeShoeboxHandle);
        config = {
          plugin: shoeboxContent,
          title: shoeboxName,
          userName: userName,
          id: shoeboxId,
          handle: activeShoeboxHandle,
          icon: ""
        };
        config.title = _.truncate(config.title, {'length': 15});
        _this.add(config, null, null);
        activeShoeboxHandle.loadModel(shoebox);
        _this.__shoeboxName.useDefaultValue();
        return _this.__shoeboxName.clearError();
      });
    })["catch"](function(error) {
      __logger__.error("Error while calling request " + error);
      return $when.reject(new Error("Error while calling request. " + error));
    });
  };
})(this));

};

所以,为了启发,我能够在一个简单的 if 语句中使用 substring 方法找到解决这个问题的方法。问题似乎是我把它放在代码的错误部分,所以我想为未来的读者澄清什么对我有用。我能够在键中应用以下内容:值对并且它完全有效:

config =
    plugin: shoeboxContent
    title: if name.length > 24
        "#{name.substring 0, 24}..."
    else
        name

    userName: shoebox.getUserName()
    id: shoebox.getId()
    handle: activeShoeboxHandle
    icon: ""

@add config, null, null