2016-11-15 59 views
0

我用一个简单的插件添加一些功能,以我的模板:使用功能,动态更新另一个函数的参数对象

$('.foo').ellipsis({ 
    lines: 3 
}); 

我想什么来表示的行数与函数而不是数字显示:

$('.foo').ellipsis({ 
    lines: function() { return 3 } 
}); 

由于某些原因,这不起作用。我很确定这不是插件错误,但我误解它的工作原理。有任何想法吗?

甲codepen是:

http://codepen.io/Deka87/pen/qqNzZb

+1

你使用哪个插件?这看起来很具体插件 – Timo

+0

https://github.com/jjenzz/jquery.ellipsis – sdvnksv

+0

你为什么要这样做?你能发布你的实际用例吗? – Cristy

回答

2

对于代码的工作,该插件必须要建接受一个函数作为lines属性的值。从源文件中,我注意到lines的唯一有效值是字符串"auto"或数字值。

你需要做这样的事情:

$('.foo').each(function() { 
    $(this).ellipsis({ lines: $(this).data('truncate-lines') }); 
}); 

如果你想修改插件来支持你的代码,添加以下的代码在init()第一线可能会做的伎俩:

if(typeof base.opts.lines === 'function') { 
    base.opts.lines = base.opts.lines.call(el); 
} 
+0

谢谢,通过“each”方法。对我而言,这并不是每个函数都接受另一个函数作为参数的值。 – sdvnksv

1

jquery.elipsis的文档不指示该插件支持传递到lines参数的功能,同样没有源代码。

一个选项是执行函数并传递返回的值。然而,随着功能立即执行这个让您对您最初的方法没有什么好处,:

$('.foo').ellipsis({ 
    lines: (function() { return 3 })() 
}); 
0

简单的方法是在页面加载时调用省略号。

// page load 
// get data attribute 
var ellipsis = $('elem').attr('truncate-lines') 
// call the plugin 
$('.foo').ellipsis({ 
    lines: par``seInt(ellipsis, 10) 
}); 
0

你可以尝试让你传递对象,使线是一个getter ..

另外如果你想更好的控制,你可以看看Object.defineProperty

var obj = {}; 
 

 
obj.__defineGetter__('lines', function() { return 3; }); 
 

 
console.log('obj.lines = ' + obj.lines); 
 

 
//$('.foo').ellipsis(obj);

相关问题