我正在使用knockout comment binding(称为:containerless控制流语法)。但是它在浏览器中工作正常,但在Windows 8商店应用程序中没有。 Visual Studio是否会删除所有注释?有没有办法使用评论绑定?
<ul data-bind="foreach: journal">
<!-- ko if: typeof $data!=='string' -->
<li data-bind="text:Name"></li>
<!-- /ko -->
<!-- ko if: typeof $data==='string' && $data!='' -->
<li data-bind="text:$data"></li>
<!-- /ko -->
</ul>
错误是:Name is undefined
。
如果我进行以下操作,则定义名称:
<ul data-bind="foreach: journal">
<li data-bind="text:Name"></li>
</ul>
有没有办法在Windows 8商店应用中使用无容器控制流语法?
解决方案
我找到了这个great tutorial的解决方案。
我用jQuery加载数据然后用ko绑定它。虽然这个加载,Windows似乎删除不安全的代码。通过以下功能,我可以附加“不安全”代码:
$.ajax({
url: "msappx://journal.html",
success: function (data) {
if (typeof winjs !== undefined) {
MSApp.execUnsafeLocalFunction(function () {
$(jqAppendTo).append(data);
});
}
else {
$(jqAppendTo).append(data);
}
}
});
答案 0 :(得分:0)
您可以使用计算的observable来简化您的淘汰赛模板......
<ul data-bind="foreach: fitered_journal">
<li data-bind="text: $data"></li>
</ul>
与...配对。
$ ->
viewmodel = ->
self = this
self.journal = ko.observableArray([
'',
'Some string data',
{Name: 'other string data'}
])
self.fitered_journal = ko.computed(->
items = []
for item in self.journal()
if typeof item isnt 'string'
items.push(item.Name)
else if typeof item is 'string' and item isnt ''
items.push(item)
return items
)
ko.applyBindings(viewmodel)
这里是fiddle