knockout.js
2013-04-25 88 views 1 likes 
1

本质上,我试图实现RobN极其简单的使用'模板'数据绑定的模板切换器http://jsfiddle.net/rniemeyer/XYz8M/在Knockout中实现菜单 - 在不同视图模型之间切换视图

(---SO wants code here - see fiddle for complete code---) 
    <div id="templateContent" data-bind='template: { name: currentView() }'></div> 

    var viewModel = { 
     currentView: ko.observable("template-1"), 
     toggleView: function() { 
     this.currentView(this.currentView() === "template-1" ? "template-2" : "template-1"); 
    } 
    }; 

    ko.applyBindings(viewModel); 

我已经看到了很多其他简单的例子,这样做的,所有正在使用的每个加载模板相同ViewModel类。例外 - RobN的SamplePresentation应用程序(我没有足够的代表点来发布另一个链接),同时令人印象深刻,我发现很难连接到我的noobie KO体验。我认为他在他的section.activate()方法中这样做了,但是,对我来说还不清楚。

我想在真实应用中使用这个概念,但有绑定上下文问题。这里是我想要做的事:http://jsfiddle.net/jockor/DSEDh/4/

This line intentionally left blank (please see fiddle vs. mangling code here) 

基本上,当按下导航链接/按钮,我只是想换出主体内容面板另一个模板。该模板需要自己的viewModel支持自己的数据。

上面的小提琴是我在这个概念的简化版本 - 只是试图在猫和狗面板之间切换。我遇到的是绑定到'模板'data-bind的数据用于加载的cat/dog模板。

有人可以告诉我,如果我这样做是否正确,或者如果我滥用'模板'绑定概念?

回答

1

我已修改了的jsfiddle工作:

http://jsfiddle.net/5rmAL/2/

你需要的是切换模板绑定以及的data领域。您只是切换模板名称,我可以从代码中看到您正在寻找一种方法来更改视图模型数据。所以,我粗暴地实现它,以便它在切换名称时将数据从viewModel切换到viewModel。有更多的优雅的方式来做到这一点,但jsfiddle只是为了演示。

通过更改data,您可以修改模板指向以获取其数据的内容。通过做出可观察的结果,我能够获得它指向切换的数据。上面我粗略的实现使用了一个简单的对象,该对象既包含模板名称又包含可观察对象中的数据。由于模板名称和数据必须同时切换,因此我更新了observable内部对象的值,然后手动告诉observable其值已更改。如果更改模板名称前的数据,它会尝试绑定以前的模板。同样,如果您在数据前更改名称,它会尝试将旧数据绑定到新模板。所以,为了做到这一点,没有在重新绑定模板时找不到变量和东西,你需要确保你的template绑定不会更新,然后再更改模板的名称和数据指向。

编辑:我注意到你有一个函数处理函数在你的挖空绑定中传递$ data作为函数的第一个参数。 Knockout总是将$ data作为第一个参数传递给函数,所以我用....goto(... = stuff)替换了function() { ....goto($data); }。这只是一个边节点(甚至不需要对你的函数签名进行任何修改)。

+0

谢谢先生,你的确是Los Frijoles!我正在寻找一种使用多个ViewModel的方法,我认为你已经找到了一个巧妙的方法来做到这一点。我确实尝试了几种不同的方式来交换数据,但无法获得正确的组合。我会在我的应用程序中试试这个,看看我是否遇到了您怀疑可能会等待的时间问题。再次感谢。 – user2003699 2013-04-25 19:10:55

相关问题