2011-12-28 137 views
4

我认为我们不应该在viewmodel中引用html元素。所以我认为我不能做$('#id')。dialog()或不应该做alert('message')或window.open()。 那我应该怎么做呢?如何使用knockout.js显示警报/弹出窗口/窗口

+2

看看这个答案,使用自定义绑定来控制视图模型中的jQuery UI对话框的示例。 http://stackoverflow.com/questions/8611327/integrating-jquery-ui-dialog-with-knockoutjs/8611892#8611892。将observable设置为true打开对话框,将其设置为false关闭它。 –

+0

这是完美的。谢谢。 –

回答

8

看看这个答案,使用自定义绑定从视图模型控制jQuery UI对话框的示例。

integrating jquery ui dialog with knockoutjs

设置可观察到真正打开的对话框中,将其设置为false关闭它。

+0

好的,你会得到2 upvotes并接受:)已经upvoted原答案。 –

1

实际上,使用对话框是没有任何努力的。只要让Knockout进行绑定,数据就会存在于对话元素中。在我的应用程序中,如果对话框打开或没有效果。淘汰赛仍然会更新这些值。

一个考虑因素,我做逻辑部分我的绑定。所以我会将ko.applybindings分别应用于页面的主体和对话框中的两个调用。

关于警报,您必须传递要显示的文本。所以要在这里使用淘汰赛,你必须让淘汰赛更新一个隐藏的元素。然后获取结果值以显示在警报中。

对于window.open,不知道你关心的是什么。据我了解,这是一个新的页面。因此,该页面的逻辑将完成填充。

+0

是的,我知道淘汰赛会在隐藏的对话框中填充值。但是如何显示对话框? –

+0

我想我的viewmodel只包含逻辑和没有引用的UI。这样我就可以独立于UI来测试它,就像我可以在用C#编写的单元测试中测试业务逻辑类一样。我无法测试我的课程打开窗口或显示警报我想。 –