Windows 8存储应用程序和ko注释绑定

时间:2014-05-04 10:24:07

标签: knockout.js windows-8 windows-store-apps

我正在使用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);
  }

    }
});

1 个答案:

答案 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