最近在Dart上看到过"Expando"一词.听起来不错.API没有为我提供太多线索.
一两个例子可能是最有帮助的!
(不确定这是否相关,但我最担心的是将方法(getter)和/或变量添加到类中.希望这可能是解决这个问题的关键.(提示:我正在使用Nosuchmethod方法现在,希望能够返回未完成方法的值.))
提前致谢,
_swarmii
我正在使用jQuery开发代码,需要存储与某些DOM元素相关的数据.关于如何使用html元素存储任意数据还有很多其他问题,但我更感兴趣的是为什么我会选择一个选项而不是另一个.
为了极其简化的参数,我想要存储一个"lineNumber"属性,其中每一行都是"有趣"的表.
选项1只是在每个DOM元素上设置一个expando属性(我希望我正确使用'expando'一词):
$('.interesting-line').each(function(i) { this.lineNumber = i; });
Run Code Online (Sandbox Code Playgroud)
选项2是使用jQuery的data()函数将属性与元素相关联:
$('.interesting-line').each(function(i) { $(this).data('lineNumber', i); });
Run Code Online (Sandbox Code Playgroud)
忽略我的示例代码的任何其他缺点,是否有充分的理由为什么您会选择一种方法来存储属性而不是另一种?
我正在尝试整合一种在HTML中标记各种组件的方法,这些组件由jQuery脚本解析并在页面加载时创建.
例如,目前我可以将以下内容放入我的页面..
<a href="link.html" class="Theme-Button Theme-Button-Style-win2007 Theme-Button-iconLeft Theme-Button-AlignmentCenter Theme-Button-fullWidth">This is a button</a>
Run Code Online (Sandbox Code Playgroud)
当jQuery脚本找到它时,它会注入创建一个带有图标的按钮所需的html以及所有必要的事件等.
但是,这很麻烦,需要很多长类名.我宁愿做这样的事......
<a href="#" class="Theme-Button" data="{style: 'win2007', icon: 'left', align:'center', fullWidth: true}"></a>
Run Code Online (Sandbox Code Playgroud)
它不是那么短,但在我看来更整洁,需要更少的解析.麻烦的是,我已经对"expandos"进行了一些研究,我相当肯定有些浏览器会不喜欢它并且它不会验证.
有人有更好的建议吗?
当我尝试将ASP.NET数据绑定GridView到IEnumerable<ExpandoObject>使用时ObjectDataSource,我得到以下异常.
System.Web.HttpException(0x80004005):DataBinding:'System.Dynamic.ExpandoObject'不包含名为'StoreID'的属性.
有谁知道我怎么能数据绑定到ExpandoObjects?
我正在使用Dapper将2列结果集提取到字典中.我注意到当我将鼠标悬停在结果集上时,intellisense向我显示了一个.ToDictionary(),但由于dapper使用动态属性/ expandoObject,我无法使其工作
Dictionary<string, string > rowsFromTableDict = new Dictionary<string, string>();
using (var connection = new SqlConnection(ConnectionString))
{
connection.Open();
var results = connection.Query
("SELECT col1 AS StudentID, col2 AS Studentname
FROM Student order by StudentID");
if (results != null)
{
//how to eliminate below foreach using results.ToDictionary()
//Note that this is results<dynamic, dynamic>
foreach (var row in results)
{
rowsFromTableDict.Add(row.StudentID, row.StudentName);
}
return rowsFromTableDict;
}
}
Run Code Online (Sandbox Code Playgroud)
谢谢
关于jQuery实用程序函数jQuery.data(),在线文档说:
"jQuery.data()方法允许我们以一种不受循环引用安全的方式将任何类型的数据附加到DOM元素,从而避免内存泄漏."
为什么使用:
document.body.foo = 52;
Run Code Online (Sandbox Code Playgroud)
可以导致内存泄漏 - 或者在什么条件下 - 以便我应该使用
jQuery.data(document.body, 'foo', 52);
Run Code Online (Sandbox Code Playgroud)
在任何情况下,我是否总是更喜欢.data()而不是使用expandos?
(如果您能提供一个比较差异的示例,我将不胜感激)
谢谢,
burak ozdogan
我在Liferay中添加了一个自定义用户字段,并为特定用户设置了一个值.
如何以编程方式访问此值?
如果我试试这个,我总是得到null:
String customAttr = (String)user.getExpandoBridge().getAttribute("customAttr");
Run Code Online (Sandbox Code Playgroud)
user.getExpandoBridge().getAttribute("customAttr")返回Type的值java.IO.Serializable.
也许这里的演员是错的?
但是自定义属性确实存在(以下代码打印出属性键):
for (Enumeration<String> attrs = user.getExpandoBridge().getAttributeNames(); attrs.hasMoreElements();)
_log.info("elem: '" + attrs.nextElement() + "'");
Run Code Online (Sandbox Code Playgroud)
不知怎的,我在这里错过了这一点......
我有一个很常见的设计问题:我需要为Google App Engine中的记录实现历史记录(审计跟踪).历史日志必须是结构化的,即我不能将所有更改加入到一些自由格式文本中并存储在字符串字段中.
我已经考虑了历史模型的以下选项,并且在注意到选项#1中的性能问题之后,我选择实现选项#3.但是,如果这个解决方案是高效和可扩展的,那么我们会有些怀疑.例如:随着选项#3中动态属性数量的增加,性能是否会显着下降?
您是否对每个选项的优缺点有更深入的了解,或者可以建议适用于Google App Engine数据库特征的其他审计跟踪设计模式?
fieldName创建history_fieldName_n字段(其中n = <0..N>是一些历史记录)
fieldName创建一个fieldName_history列表字段
在底层jQuery使用地图"的UUID"(只是将其作为保持计数器jQuery.uuid)来解决著名的内存泄漏问题浏览器有当您从Javascript的DOM附加属性的标签.代替这样做,JQuery使用它$.data(tag, name, value)来存储从uuid键入的地图中的数据(可以通过检查确定的键tag[jQuery.expando]).
虽然$.data()非常有用,但有时您希望将数据映射到标记而不将数据转储到一个全局存储桶中 - 您需要自己的小数据桶,例如,检查长度或循环.
作为一个人为的例子,假设你有点击时可以旋转通过4种状态之一的图标.当一个处于状态2时,您希望将其添加到状态2中的图标数组.最明显的方法是将标记添加到数组中; 但这样做会造成内存泄漏.你可以调用$.data()复选框,但这并不能完成你想要做的事情 - 你必须遍历所有复选框来检查$.data()它们以找出哪些是和不在列表中.
你需要在数组中存储一些标签的抽象,这就是jQuery的UUID.您可以编写自己的UUID功能,但理想情况下,您只需利用已内置于JQuery的UUID功能,无论是代码大小还是质量原因.您可以要求JQuery通过调用隐式地将UUID附加到标记$.data(tag, 'irrelevant', 1),然后检查tag[jQuery.expando]以获取其UUID,最后在列表中使用它...但这有点像黑客.真正理想的是在公共API中公开以下内容:
$.getUuid(tag):检查并创建一个UUID(如果不存在) - 理想情况下,该方法是从中分解的,$.data()并为传入的标记创建或获取uuid.
那么,有没有一个原因在jQuery中没有考虑到它自己的方法?这在某种程度上有害吗?它只是从来没有看似有用的东西吗?
我应该注意到,我实际上已经在我们正在使用的jQuery版本中考虑了它,并且它非常有用.但也许存在潜在的风险,我没有打算使用它.我也知道一个插件可以实现这一点,但它有点破碎 - 并且有两个代码路径来执行相同的UUID功能既有点浪费又有点脆弱.
expando ×10
jquery ×4
javascript ×3
c# ×2
audit ×1
c#-4.0 ×1
css ×1
dapper ×1
dart ×1
dynamic ×1
html ×1
java ×1
liferay ×1
memory-leaks ×1
nosuchmethod ×1
performance ×1
python ×1
uuid ×1