0

当我单击新博客主题的保存链接时,控制台输出是主题对象的空值。当我单击现有博客主题的保存链接时,输出是主题对象的旧值。

为什么单击保存链接时没有为属性分配值?

 var viewModel = function(topics){
        var self = this;
        self.topics = ko.observableArray(topics);
        self.editing_topic = ko.observable("");

        self.new_topic = function(){
            self.edit_topic({});
        }

        self.edit_topic = function(topic){
            self.editing_topic(topic);
            form.dialog({width:800, height:600, modal:true});

        };

        self.save_topic = function(){
            console.log(self.topic());
        };
    };
   ko.applyBindings(new viewModel(jsondata));

<fieldset class="blog_topic_form" title="New Blog Entry">
    <div>
        <label for="topic_title">
            Title:
        </label>
        <input type="text" id="topic_title" data-bind="value: topic().topic_title"/>
    </div>
    <div>
        <label for="message_contents">
            Message:
        </label>
        <textarea id="message_contents" class="message_contents" data-bind="value: topic().message_contents"/>
    </div>
    <footer>
        <a class="save_link" data-bind="click: save_topic"></a>
        <a class="cancel_link"></a>
    </footer>
</fieldset>

编辑:这里是 jsfiddle:http: //jsfiddle.net/jLkxG/3/

当您运行它时,它将分配默认值。但是,如果您编辑文本框并单击保存链接,它将输出原始(初始)值,而不是在文本框中输入的值。

4

2 回答 2

1

您提供的代码没有完全意义。

我假设您提供的字段集标记是对话框的内容?如果是这种情况,那么您的输入绑定到什么?

目前,文本框绑定到 viewModel 上的主题属性,但不存在这样的属性。您还期望此主题对象具有属性 topic_title 和 message_contents 但这些不在您的模型中。如果您现有的值绑定来创建属性,这不是它的工作方式。

我认为您需要向我们展示更多代码或提供小提琴。我冒昧地在 jsfiddle 中复制了您的代码。

http://jsfiddle.net/madcapnmckay/jLkxG/

于 2012-04-09T00:26:04.803 回答
1

请更新您的代码以匹配 jsfiddle 中的代码。

在 jsfiddle 中,您的 editing_topic 属性(topic_title 和 message_contents)应该被定义为可观察的,而不是 editing_topic 属性本身。

我已经更新了您的 jsfiddle 以使其正常工作:http: //jsfiddle.net/jLkxG/4/

于 2012-04-09T02:07:09.317 回答