0

我是使用 knockoutjs 的新手,因此需要一些关于我想要实现的目标和最佳实践的帮助。

我正在开发一个 mvc4 应用程序,我正在调用一个返回 json 的控制器操作,然后我将它绑定到我的视图模型,例如。

 $.getJSON("/cart/summary", function (data) {
        myModel = ko.mapping.fromJS(items);
        ko.applyBindings(myModel , document.getElementById("my-container"));
    });

myModel 视图模型是从控制器返回的 json 对象的直接表示。

该对象包含一个属性 (Prop1),它是一个对象,另一个属性 (Prop2) 是一个对象列表。

Prop1 对象包含一个小数属性,我想使用 Globalize 插件将其格式化为货币。最好的做法是什么,应该在视图模型中完成并绑定到视图?如果是这样,我该如何扩展我的模型来做到这一点?还是在视图中完成?

如果 Prop2 有超过 0 个项目,我想显示一个 div,即。它不是空的。再次类似的问题,我应该返回一个表明这一点的属性还是在标记中执行它?

我想绑定一个属性以将文本附加到 div,这是如何完成的?

最后,绑定完成后,我想动画绑定完成的事实 - 不关心效果是什么,只是想知道它是如何完成的?

感谢您的任何反馈。

4

1 回答 1

1

对于一个“问题”来说,这是很多问题。我想我已经解决了所有问题。


如果你想使用 globalize 插件,你最好在客户端进行货币格式化。作为一般的经验法则,表示逻辑无论如何都应该在表示层中完成。您的业​​务逻辑,甚至其他视图可能不需要货币格式。


同样,遵循同样的经验法则,表示层是关心模型对象有多少项目的东西。这可以通过 ko 绑定轻松完成。

http://knockoutjs.com/documentation/if-binding.html

<!-- ko if: listObjectName.length > 0-->
    // put your div and list bindings in here
<!-- /ko -->

要将文本附加到 div,您可以根据您的确切目标绑定到跨度的文本或 html。

http://knockoutjs.com/documentation/html-binding.html


要在加载完成后放置动画,可以使用afterRender事件。

http://knockoutjs.com/documentation/template-binding.html#note_4_using_afterrender_afteradd_and_beforeremove

总结这篇文章,你需要设置你的模板:

<div data-bind='template: { name: "personTemplate",
                       data: myData,
                       afterRender: myPostProcessingLogic }'> </div>

然后你可以在视图模型myPostProcessingLogic上创建函数myData

Here is a stackoverflow post on adding a glow effect on mouse hover or at set intervals. You care most about the technique used for the interval. Instead of doing it at set intervals, you would just do it whenever the myPostProcessingLogic is called.

How do I animate a glowing effect on text?

于 2013-02-19T15:30:36.637 回答