将JSON数据分配给Coffee脚本中的Knockout视图模型

时间:2012-08-15 23:18:01

标签: knockout.js coffeescript asp.net-mvc-4

我的观点

<ul class="AvailableAdvertisers" data-bind="foreach: availableAdvertisers">
   <li class="advertiser" data-bind="selectedToggle: selected() == true, click: toggleSelected">
      <span class="name" data-bind="text: name"></span>
   </li>
 </ul>

Coffe Script

class wizardPageModel
    constructor: (@jsonObject) ->
        @availableAdvertisers = @jsonObject.SelectedAdvertisers

        @selectedAdvertisers = ko.observableArray()

我想要做的是使用我在视图加载时获得的JSON字符串初始化视图模型。

var testModel = @Html.Raw(Json.Encode(Model));

在我包含包含我的咖啡脚本类定义的javascript后,尝试执行applyBinding。

<script src="/Scripts/Wizard.js" type="text/javascript"></script>
<script type="text/javascript">
$(document).ready(function(){
    var myJson = @testModel;
    ko.applyBindings(new wizardPageModel(myJson));
    });
</script>

在调试期间,我看到JSON字符串很好,我可以在监视窗口中看到值。 有什么想法我做错了什么?感谢。

编辑: $(document).ready(function(){抛出异常

  

Microsoft JScript运行时错误:预期的对象

尝试用

替换它
  

jQuery(function(){

也没用。所以我做了

<script src="/Scripts/Wizard.js" type="text/javascript"></script>
<script type="text/javascript">
var myJson = @testModel;
 ko.applyBindings(new wizardPageModel(myJson)); 
</script>

现在它给了我异常

  

wizardPageModel未定义。

1 个答案:

答案 0 :(得分:0)

您使用什么引擎编译CoffeeScript?似乎您的wizardPageModel被放入(function() {})()。如果您使用Mindscape Web Workbench,那么它就是。移至Mindscape/Web Workbench Settings,找到.coffee并查看Emit bare JavaScript 如果您使用控制台工具进行编译,那么请查看相应的参数。


检测此类问题的常用方法是将断点放在wizardPageModel定义和使用ko.applyBindings(new wizardPageModel(myJson));。然后,您将能够确定首先调用的内容并找出问题所在。