document_table_Settings : function ()
{
return{
rowsPerPage: 5,
showNavigation: 'auto',
showColumnToggles: false,
fields: [
{key: 'para',label: 'Para',sortable: false},
{key: 'desc', label: 'Description',sortable: false},
{
key: 'rowId', label: 'Delete',sortable: false, fn: function (rowId, object) {
var html = "<button name='Del' id=" + rowId + " class='btn btn-danger'>Delete</button>"
return new Spacebars.SafeString(html);
}
},
{
key: 'rowId', label: 'Edit',sortable: false, fn: function (rowId, object) {
var html = "<button name='edit' id=" + rowId + " class='btn btn-warning'>Edit</button>"
return new Spacebars.SafeString(html);
}
}
]
};
}
我想显示描述条目显示更多并显示更少的功能。由于描述足够长。因此,在100个字符后,它会显示切换按钮。
答案 0 :(得分:0)
如果我理解正确,您只是尝试在Reactive Table中显示“Description”列的前100个字符,然后添加一些机制,以便用户可以单击或翻转以查看整个“Description”文本
有几种方法可以实现这一点,我在下面提供了两个选项(为了简单起见)。
title
属性元素显示翻转的全文。首先,您需要定义一个'truncate'模板助手(我会将其设为全局助手,以便您可以在应用中的任何位置使用)。
span
然后为列创建一个新模板。
Template.registerHelper('truncate', function(strValue, length) {
var len = DEFAULT_TRUNCATE_LENGTH;
var truncatedString = strValue;
if (length && length instanceof Number) {
len = length;
}
if (strValue.length > len) {
truncatedString = strValue.substr(1, len) + "...";
}
return truncatedString;
});
最后,将您的Reactive Table配置更改为使用模板。
<template name="field_description">
<span title="{{data.description}}">{{truncate data.description}}</span>
</template>
更改模板。
fields: [
...,
{ key: 'desc', label: 'Description', tmpl: Template.field_description }
...,
];
然后将必要的逻辑添加到field_description模板(包括事件处理程序)。
<template name="field_description">
<span>{{truncatedDescription}}
{{#if showLink}}
<a href="#" class="js-more-less">{{linkState}}</a>
{{/if}}
</span>
</template>
最后,请确保您的Reactive Table配置仍设置为使用该字段的模板。
import { Template } from 'meteor/templating';
import './field-description.html';
Template.field_descirption.onCreated(function() {
const MAX_LENGTH = 100;
this.description = new ReactiveVar(Template.currentData().description);
this.showMore = new ReactiveVar(true);
if (this.description.get().length > MAX_LENGTH) {
this.description.set(Template.currentData().description.substr(1, MAX_LENGTH));
}
this.showLink = () => {
return Template.currentData().description.length > MAX_LENGTH;
};
this.toggleTruncate = () => {
if (this.showMore.get()) {
this.description.set(Template.currentData().description);
this.showMore.set(false);
} else {
this.description.set(Template.currentData().description.substr(1, MAX_LENGTH));
this.showMore.set(true);
}
};
});
Template.field_descirption.helpers({
truncatedDescription: function() {
return Template.instance().description.get();
},
showLink: function() {
return Template.instance().showLink();
},
linkState: function() {
if (Template.instance().showMore.get()) {
return 'show more';
} else {
return 'show less';
}
};
});
Template.field_descirption.events({
'click .js-more-less'(event, instance) {
instance.toggleTruncate();
},
});
请注意,第二个选项使用Meteor的Reactivity来解决问题。如果您需要有关第二种解决方案如何工作的其他说明,请与我们联系。
应该这样做!