【问题标题】:Display an images using data-bind knockout.js使用 data-bind knockout.js 显示图像
【发布时间】:2014-05-23 22:17:35
【问题描述】:

我正在为一个使用 MVC 和 knockout.js 的 Web 应用程序创建一个表。我有做网络开发的经验,但这是我第一次使用淘汰赛。我目前有一个包含 3 列的表。使用显示数据的剔除函数填充第二个和第三个。除了使用图像而不是文本之外,我尝试以相同的方式设置第一列。我不断收到损坏的图像图标和浏览器控制台中的错误。

浏览器给我的错误: GET http://hostinfo/Sponsor/~PracticeAppImagesGWC.png 404(未找到)

这是我的桌子:

<table id="sponsorTable">
    <thead><tr>
        <th></th><th id="sponsor">Sponsor</th><th id="description">Description</th>
    </tr></thead>
    <!-- Todo: Generate table body -->
    <tbody data-bind="foreach: Sponsors">
        <tr>
            <td><img data-bind="attr: {src: Image}" /></td>
            <td class="sTableInfo" data-bind="text: Name"></td>
            <td class="sTableInfo" data-bind="text: Description"></td>
        </tr>
    </tbody>
</table>

这是我填表的函数。 (第 2 列和第 3 列填写正确)

function pageModel() {
    var self = this;
    self.Sponsors = ko.observableArray([]);
}

function Sponsor( _image, _name, _descrip)
{
    var self = this;

    self.Image = ko.observable(_image);
    self.Name = ko.observable(_name);
    self.Description = ko.observable(_descrip);
}

var viewModel = new pageModel();
viewModel.Sponsors().push(new Sponsor("~/Images/GWC.png", "name1", "info1"));
viewModel.Sponsors().push(new Sponsor("second image would go here", "name2", "info2"));

$(function () {

    ko.applyBindings(viewModel);
})

我认为有些东西正在逃避 img 源链接中的斜线,但我不确定,我不知道为什么。

更新:我的编译器告诉我这个图像标签:“验证(HTML5):元素'img'缺少必需的属性'src'。”

【问题讨论】:

  • tilda ~ 在这种情况下不可用,它只是服务器端
  • &lt;img src="~/Images/TrueBlood.png" height="175" width="175" alt="Hammer True Blood" /&gt; 我在另一个页面上使用了 tilda(例如这里),它工作得很好。
  • 我认为您的服务器可以解释这一点。尝试在你的页面上做一个“查看源代码”,我想你会有完整的路径
  • 我更新了问题.. 添加了一些我在底部发现的新信息。希望它有助于解决这个问题。我还是一头雾水。

标签: javascript html knockout.js


【解决方案1】:

push必须在observableArray本身,你需要去掉括号:

var viewModel = new pageModel();
viewModel.Sponsors.push(new Sponsor("~/Images/GWC.png", "name1", "info1"));
viewModel.Sponsors.push(new Sponsor("second image would go here", "name2", "info2"));

【讨论】:

  • 在我尝试添加图像之前一切正常。图像是唯一不起作用的东西。尝试这个也没有用。控制台错误确实发生了变化。 GET http://**host info**:54137/Sponsor/~/Images/GWC.png 404 (Not Found) 看起来它现在只是试图进入错误的文件夹。 Idk 为什么它在 /Sponsor/ 文件夹中查找。
  • @Jason9024 是的,因为~,我必须说我告诉过你:)
  • 所以我只需要给它完整的文件位置?我试过给它更多的路径信息,但似乎没有任何效果。 :( 我现在很沮丧。我讨厌无法弄清楚。
  • @Jason9024 如果您愿意,可以使用 ../ 语法的相对路径。哦等等,我想你可以简单地做/Images/GWC.png
  • 虽然都是我的 :)
【解决方案2】:

只从视图模型中传递图像名称,静态文件夹路径可以像这样附加。

// in viewmodel
viewModel.Sponsors().push(new Sponsor("GWC.png", "name1", "info1"));
// inside table
<td><img data-bind="attr: {src:'/Image/'+ Image}" /></td>

希望这会有所帮助...

【讨论】:

  • 仍然得到损坏的图像图标。
  • 图像不可用或路径错误。您可以尝试更改或添加〜路径。需要知道你的项目的目录安排..
  • 我有项目文件夹。然后在里面我有9个文件夹。这 9 个之一是图像所在的图像文件夹。
猜你喜欢
  • 2018-01-02
  • 1970-01-01
  • 1970-01-01
  • 2021-01-20
  • 2011-08-18
  • 1970-01-01
  • 1970-01-01
  • 2014-04-18
相关资源
最近更新 更多