Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何使用Knockout.js在表中显示文本或链接_Javascript_Knockout.js - Fatal编程技术网

Javascript 如何使用Knockout.js在表中显示文本或链接

Javascript 如何使用Knockout.js在表中显示文本或链接,javascript,knockout.js,Javascript,Knockout.js,我正在做一个项目,它将为存储在S3 bucket中的对象生成一个预先签名的URL。我有一个方法,它接受bucket名称和路径名称,如果成功,则返回预先签名的URL;如果发生异常,则返回bucket和路径的串联。我想做的是,如果返回URL,则显示直接下载链接;如果URL生成不成功,则显示带有连接的bucket/path的文本(而不是链接)。我想我可以做如下的事情: 视图: 统一资源定位地址 基于isvalidul嵌套在foreach:data中的绑定上下文,我认为您可能希望isvalidul成为

我正在做一个项目,它将为存储在S3 bucket中的对象生成一个预先签名的URL。我有一个方法,它接受bucket名称和路径名称,如果成功,则返回预先签名的URL;如果发生异常,则返回bucket和路径的串联。我想做的是,如果返回URL,则显示直接下载链接;如果URL生成不成功,则显示带有连接的bucket/path的文本(而不是链接)。我想我可以做如下的事情:

视图:


统一资源定位地址

基于isvalidul嵌套在
foreach:data
中的绑定上下文,我认为您可能希望isvalidul成为数据数组每个成员上的属性,而不是根视图模型上的属性。它也不需要是可见的,除非您在运行时更新这些链接

var GetDataModel=函数(){
var self=这个;
self.data=ko.observearray();
self.example=[”https://www.example.com“,“bucketName/pathName”];
函数isValidURL(urlToCheck){
返回urlToCheck.lastIndexOf(“http”,0)==0;
}
函数pushData(){
对于(变量i=0;i

统一资源定位地址

您正在覆盖可观察对象并打破数据绑定
self.urlIsValid=isvalidul(self.example[i])
应该是一个函数赋值,比如
self.urlIsValid(isvalidul(self.example[i])感谢您指出这一点,但它仍然不起作用。当我取出ko if/ifnot语句(对JS没有任何更改)并让它无论如何创建一个链接时,它运行得非常好,但一旦我将ko if/ifnot语句放回,它就不起作用了。我在我的JS中放了一些警报,发现当包含ko if/ifnot语句时,它会在将数据推送到数组之前执行警报,但不会执行之后的警报。有什么想法吗?当你说链接不起作用时,你是说它根本没有被显示,还是说它显示了,但没有正确导航?它根本没有显示(实际上,表中没有显示任何内容——它似乎由于某种原因而挂起,因为我在
self.data.push之后也没有执行任何内容)。如果在pushData中注释掉urlIsValid setter,并在定义时手动将urlIsValid设置为true(
self.urlIsValid=ko.observable(true);
),是否显示链接?
 <div id="dataView">
     <table>
         <thead>
              <tr>
                  <th>URL</th>
              </tr>
          </thead>
          <tbody data-bind="foreach: data>
              <tr>
                  <!-- ko if: urlIsValid -->
                      <td>
                          <a data-bind="attr: {href: location}" target="_blank">
                              Download
                          </a>
                      </td>
                  <!-- /ko -->
                  <!-- ko ifnot: urlIsValid -->
                      <td data-bind="text: location"></td>
                  <!-- /ko -->
              </tr>
          </tbody>
      </table>
 </div>
"use strict"

P.when('knockout', 'ready').register('data_model',
     function(ko) {

    var GetDataModel = function () {
        var self = this;
        self.urlIsValid = ko.observable();
        self.data = ko.observableArray();
        self.example = [ "https://www.example.com", "bucketName/pathName" ]

        function isValidURL(urlToCheck) {
            return urlToCheck.lastIndexOf("http", 0) === 0;
        }

        function pushData() {
            for (var i = 0; i < example.length; ++i) {
                self.urlIsValid = isValidURL(self.example[i]);
                self.data.push ( {
                    location : self.example[i];
                } );
            }
        }
    }

    var dataModel = GetDataModel();
    ko.applyBindings(dataModel, document.getElementById('dataView'));
});