这个问题刚刚得到了投票,所以可以用我所做的更新问题
我通过迭代窗口对象(或用户指定的对象根)来解决它,当我找到正确的实例时,我回溯并从索引中获取名称。最终解决方案可以在这里找到
https://github.com/AndersMalmgren/Knockout.BindingConventions
更新结束
我正计划为 KnockoutJS / MVC 编写一个关于配置模板源引擎的约定。我从一个小的客户端 POC 开始,马上就遇到了一个表演障碍
我的计划是使用这种语法或类似的东西
MyApp.EditCustomersViewModel = function() {
ko.templates.loadView(this);
};
执行此操作时,它将检查模板缓存或使用对象名称作为键从服务器获取模板。问题是我无法获得原型对象的名称,我试过这个
Object.prototype.getName = function() {
var funcNameRegex = /function (.{1,})\(/;
var results = (funcNameRegex).exec((this).constructor.toString());
return (results && results.length > 1) ? results[1] : "";
};
如果适用于这样定义的对象
function MyClass() {
}
如果您将原型添加到上述对象,它将不起作用,或者如果您像这样定义它
MyApp = {};
MyApp.MyClass = function() {
};
原型和范围界定是两个必须的,所以这是一个很好的展示,有什么想法吗?
小提琴:http: //jsfiddle.net/aRWLA/
编辑:这个的背景是这样的。
在服务器上你有这样的结构
- 模板\ [视图名称]\index.html
- 模板\ [视图名称]\sub-model-template.html
在客户端你会做
MyApp.EditCustomersViewModel = function() {
ko.templates.loadView(this);
};
这将生成一个以对象名称为键的 ajax 请求,它将获取相关视图的所有模板