knockout.js knockoutjs图像源代码没有得到更新从ko.observable

zed5wv10  于 2022-11-10  发布在  其他
关注(0)|答案(1)|浏览(80)

我有这样的代码:

<tr data-bind="foreach: ProductEffectImagesToMatch()">
                            <td>
                                <span>
                                    <img data-bind="attr: { src: PoseId() ? ImageSrc() : '../images/style2/pose-select-placeholder.png' }, click: $root.PasteSpring"
                                        width="120" />
                                </span>
                            </td>
                        </tr>

我在代码中设置了ImageSrc,但我不确定是否需要另外调用一些东西来应用绑定,因为尽管设置了该值,但我可以看到console.log中的图像url没有得到更新。
这是视图模型:

function EffectSelectionRootModel(imagesrc, poseid) {
        var self = this;
        self.ImageSrc = ko.observable();;
        self.PoseId = ko.observable();

        if (imagesrc) {
            self.ImageSrc(imagesrc);
        }

        if (poseid) {
            self.PoseId(poseid);
        }
    }

这些值是这样设置的:

var itemToEdit = ko.utils.arrayFirst(self.ProductEffectImagesToMatch(), function (item) {
                return item;
            });

            if (itemToEdit) {
                itemToEdit.ImageSrc = self.selectedPose().ImageUrl;
                itemToEdit.PoseId = self.selectedPose().Id;
            }

以及执行该代码后的视图模型:

但页面上的图像不会更新。
知道我还需要做什么吗?

zfciruhq

zfciruhq1#

像这样做

var itemToEdit = ko.utils.arrayFirst(self.ProductEffectImagesToMatch(), function (item) {
            return item;
        });

        if (itemToEdit) {
            itemToEdit.ImageSrc(self.selectedPose().ImageUrl);
            itemToEdit.PoseId(self.selectedPose().Id);
        }

你必须以这种方式设置新的值,否则你将覆盖可观察的值,它将不再工作。

相关问题