javascript - "Foreach"循环抛出错误

标签 javascript knockout.js durandal

这看起来很简单,但我不明白。所以我有 HTML

<div class="ui three column grid" data-bind="foreach: stories">
  <div class="column">
    <div class="ui stacked segment">
        <div class="ui three column grid center aligned">
                <div class="column">
                    <div class="ui buttons icon">
                        <div class="ui button small">
                            <i class="icon plus"></i>
                        </div>
                    </div>
                </div>
                <div class="column">
                    <div class="ui labels circular">
                        <div class="ui label">
                            124124
                        </div>
                    </div>
                </div>
                <div class="column">
                    <div class="ui buttons icon">
                        <div class="ui button small">
                            <i class="icon minus"></i>
                        </div>
                    </div>
                </div>
        </div>
        <div class="ui grid center aligned">
            <div class="row">
                <div class="column">
                    <h1>yo</h1> 
                </div>    
            </div>
            <div class="row">
                <div class="column">
                    <div class="ui segment" data-bind="foreach: {data: stories.strings, as: 'string'}">
                        <p data-bind="text: string"></p>
                    </div>   
                </div>
            </div> 
        </div>
    </div>
  </div>
</div>

还有我的带有 viewModel 的 js 文件

define(['knockout', 'dataContext'], function (ko, dataContext) {

viewModel = {
    activate: activate,
    main: ko.observable(true),
    stories: ko.observableArray([]),
};

return viewModel;

function activate() {
    return dataContext.getStories().then(function(data) {
        console.log(data.results);
        _.each(data.results, function(result) {
            console.log(result.strings);
            viewModel.stories.push({strings: result.strings});
        });
        console.log(viewModel.stories());
    });
  }
})

所以 foreach: 'stories' 不起作用,这就是问题所在。控制台告诉我

"Unable to process binding "foreach: function (){return stories }"
Message: Unable to process binding "foreach: function (){return {data:stories.strings,as:'string'} }"
Message: stories is not defined;"

最佳答案

异常被抛出是因为你的第二个foreach:

<div class="ui segment" data-bind="foreach: {data: stories.strings, as: 'string'}">
    <p data-bind="text: string"></p>
</div> 

因为您在“故事”的上下文中编写 stories.strings 抛出,因为 stories 项中没有 stories 属性所以你只需要编写 strings:

<div class="ui segment" data-bind="foreach: { data: strings, as: 'string' }">
    <p data-bind="text: string"></p>
</div>

关于javascript - "Foreach"循环抛出错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23218423/

相关文章:

javascript - knockout 改变一个变量的值

asp.net-mvc - Breeze Durandal 从 View 中访问 shell viewmodel 变量

javascript - knockout 变更事件处理程序

javascript - 如何期望一个字符串恰好包含 Chai 中特定字符的 N 个?

javascript - 使用 for 循环递归地循环对象数组

javascript - 如何选择性地忽略 knockout 'submit' 绑定(bind)?

javascript - breeze.config.MetadataHelper 不是 Durandal 和 Breeze 的构造函数错误

javascript - 如何获取 td 的值并将其传递到每个 td 元素的输入中?

javascript - 元素修饰符 classList.add 和 classList.remove 未按预期工作

javascript - 重新创建时 knockout PureCompulated 调用订阅者