And*_*ers 6 javascript prototype knockout.js
这个问题刚刚起来,所以可以用我所做的更新问题
我通过遍历窗口对象(或用户指定的对象root)来解决它,当我找到正确的实例时,我回溯并从索引中获取名称.最终的解决方案可以在这里找到
https://github.com/AndersMalmgren/Knockout.BindingConventions
更新结束
我打算为KnockoutJS/MVC编写一个关于配置模板源引擎的约定.我从一个小客户端POC开始,立刻跑进了一个节目塞子
我的计划是使用这种语法或类似的东西
MyApp.EditCustomersViewModel = function() {
ko.templates.loadView(this);
};
Run Code Online (Sandbox Code Playgroud)
执行此操作时,它将检查tamplate缓存或使用对象名称作为密钥从服务器获取模板.问题是我无法得到原型对象的名称,我试过这个
Object.prototype.getName = function() {
var funcNameRegex = /function (.{1,})\(/;
var results = (funcNameRegex).exec((this).constructor.toString());
return (results && results.length > 1) ? results[1] : "";
};
Run Code Online (Sandbox Code Playgroud)
如果适用于这样定义的对象
function MyClass() {
}
Run Code Online (Sandbox Code Playgroud)
如果您将原型添加到上面的对象,它将无法工作,或者如果您这样定义它
MyApp = {};
MyApp.MyClass = function() {
};
Run Code Online (Sandbox Code Playgroud)
原型和范围是两个必须,所以这是一个showstopper,任何想法?
小提琴:http://jsfiddle.net/aRWLA/
编辑:这个的背景是这样的.
在服务器上,你有这样的结构
在客户端你会做
MyApp.EditCustomersViewModel = function() {
ko.templates.loadView(this);
};
Run Code Online (Sandbox Code Playgroud)
这将生成一个以对象名称为键的ajax请求,该请求将获取相关视图的所有模板
只有提升函数 ( function someFunc() {
) 才有可检索的名称。
分配的函数不会,因为从技术上讲,您并不是命名该函数,而是创建一个匿名函数并将对其(在内存中)的引用分配给命名变量。
所以命名的是 var,而不是函数。
这使得检索函数名称的想法几乎无法启动,因为在任何模糊成熟的模式中,您将编写方法,而不是提升的函数 - 当然,方法被分配了函数。
命名表达式(请参阅其他答案)是部分解决方法,但它们还有其他问题 - 尤其是在旧版 IE 中缺乏支持。
(旁注:我长期以来一直期望浏览器供应商围绕这一点进行构建,以便可以检索分配的函数的名称,但据我所知,还没有什么乐趣。)
归档时间: |
|
查看次数: |
4904 次 |
最近记录: |