标签: knockout-templating

使用数据绑定到图像src属性的Knockout模板不起作用

我看不出这里有什么问题,但使用以下Knockout模板无法显示图像:

<script type="text/html" id="legend-template">       
    <div><input type="checkbox" data-bind="click : doSomething" ></input>
        <img width="16px" height="16px" data-bind="src: 'imagePath'" />          
        <span data-bind="text : label"> </span>
    </div>        
</script>
Run Code Online (Sandbox Code Playgroud)

这个绑定的对象看起来像这样:

tut.myObject= function (imagePath, label) {
    this.label = ko.observable(label);
    this.imagePath = ko.observable(imagePath || liveString + '/Content/images/marker.png');   
};

tut.myObject.prototype = {
    doSomething: function () { alert("do what?");
     }
};
Run Code Online (Sandbox Code Playgroud)

渲染HTML对象时,我看到标签,然后单击复选框调用doSomething.

TIA.

data-binding knockout.js knockout-templating

65
推荐指数
1
解决办法
7万
查看次数

在knockoutjs评论foreach绑定vs foreach绑定

在我的HTML中,我可以定义这些淘汰的foreach绑定:

<!-- ko foreach: customer -->
   <div data-bind="text: id" />
<!-- /ko -->
Run Code Online (Sandbox Code Playgroud)

VS

<div data-bind="foreach: customer">
    <div data-bind="text: id" />
</div>
Run Code Online (Sandbox Code Playgroud)

这两种方法之间的差异在哪里?

javascript templating knockout.js knockout-templating

52
推荐指数
1
解决办法
3万
查看次数

模板渲染后KnockoutJS绑定事件

我一直在寻找,我很有信心这是一个新问题,而不是像标题所暗示的重复.:)

基本上,我正在尝试找出KnockoutJS在使用jQuery模板之类的模板渲染后创建的可订阅事件.

我使用内置的"afterRender",但我发现如果清除了可观察数组,它就不会触发.我构建了这个演示来说明这个问题:http://jsfiddle.net/farina/YWfV8/1/.

另外,我知道我可以写一个自定义处理程序......但这对我需要的东西来说似乎没必要.

我只想在模板完成渲染后触发一个事件.

javascript jquery templates knockout.js knockout-templating

17
推荐指数
1
解决办法
1万
查看次数

在KnockoutJS中使用外部模板

可以像这样在KnockoutJS中使用外部模板吗?

<script type="text/html" id="a_template" src="templates/a_template.html">
</script>
Run Code Online (Sandbox Code Playgroud)

我尝试过这个解决方案,但没有让它运转起来.

templates external knockout.js knockout-templating

15
推荐指数
2
解决办法
2万
查看次数

我可以在模板绑定中传递变量吗?

我知道这不是一个长期使用的好方法,但是为了排除故障,有什么方法可以在绑定模板时传递一个简单的字符串,然后将其作为模板中的变量进行访问?例如,如果这是我的约束:

<!-- ko template: { name: tmplOne }, myvar: 'apple' -->
Run Code Online (Sandbox Code Playgroud)

这是tmplOne:

<div>
    <span>Fruit: </span>
    <span data-bind="text: myvar"></span>
</div>
Run Code Online (Sandbox Code Playgroud)

这将导致以下结果:

fruit: apple
Run Code Online (Sandbox Code Playgroud)

即使我必须在名为"fruit"的viewmodel中声明一个observable,我可以手动将其设置为模板绑定吗?

knockout.js knockout-templating

8
推荐指数
2
解决办法
8303
查看次数

在模板中对$ data进行双向绑定

我正在尝试设置通用的Knockout模板,可以根据数据类型在编辑和只读模式之间切换.如果您曾经使用过ASP.NET的动态数据:就像他们的字段模板一样.例如:

<script type="text/html" id="text">
    <!-- ko if: $root.editable -->
        <input type="text" data-bind="value: $data" />
    <!-- /ko -->

    <!-- ko ifnot: $root.editable -->
        <span data-bind="text: $data"></span>
    <!-- /ko -->
</script>
Run Code Online (Sandbox Code Playgroud)

这是这样使用的:

<label><input type="checkbox" data-bind="checked: editable" /> Editable</label>

<p>Name: <input data-bind="value: name" /></p>
<p>Name2: <span data-bind="template: { name: 'text', data: name }"></span></p>
Run Code Online (Sandbox Code Playgroud)

使用以下视图模型:

    var viewModel = {
        name: ko.observable("Brian"),
        editable: ko.observable(true)
    };
Run Code Online (Sandbox Code Playgroud)

我们的想法是能够在字段级别使用模板,如"Name2"示例,而不是显式元素/控件.这允许在编辑和读取模式之间轻松切换整个表单,而不需要大部分重复标记.这还允许重用通用数据类型编辑/显示标记,例如使用日期字段等的日期选择器等.

该问题
$data在模板中的伪变量没有双向绑定.它将反映observable中的当前值,但输入控件的更改不会设置该值.

我怎样才能获得双向绑定$data

另见这个jsfiddle

knockout.js knockout-templating

6
推荐指数
1
解决办法
5539
查看次数

将选项传递给击倒1.3中的模板

在knockoutjs 1.2.1我能做到:

<div data-bind="template: {name: 'Bar', foreach: persons, templateOptions:{fooMode: true} }"/>

<script id='Bar'>
    {{if $item.fooMode}} FOO! {{/if}}
</script>
Run Code Online (Sandbox Code Playgroud)

我试图将其翻译为1.3.0beta

<div data-bind="template: {name: 'Bar', foreach: persons, templateOptions:{fooMode: true} }"/>

<script id='Bar'>
    <span data-bind="if: $item.fooMode">FOO!</span>
</script>
Run Code Online (Sandbox Code Playgroud)

但新的本机模板引擎不尊重templateOptions.

还有其他方法可以将任意数据传递到模板中吗?

javascript templating knockout.js knockout-templating

5
推荐指数
2
解决办法
4887
查看次数

敲除模板绑定

我有一个ul元素,通过模板绑定填充.

<script type="text/html" id="someTemplate">
<li>
   <span data-bind="text: someText">
</li>
</script>

<ul data-bind="template: {foreach: someElemets, name: 'someTemplate'}">
</ul>
Run Code Online (Sandbox Code Playgroud)

但我希望第一个 li-tag不是来自模板的li-tag而是另一个带有按钮的li-tag,它不会连接到someElemets数组.如果我这样做的话

<ul data-bind="template: {foreach: someElemets, name: 'someTemplate'}">
    <li><button data-bind=click: doSomething">Click me</button></li>
</ul>
Run Code Online (Sandbox Code Playgroud)

然后li-tag with button将是渲染后的最后一个.解决这个问题的最佳方法是什么?

knockout.js knockout-templating

5
推荐指数
2
解决办法
1万
查看次数

使用Knockout组件时替换容器元素

有没有办法配置一个Knockout组件替换容器元素而不是将其内容嵌套在容器元素中?

例如,如果我有一个my-custom-element使用以下模板注册的自定义组件:

<tr>
    <p>Hello world!</p>
</tr>
Run Code Online (Sandbox Code Playgroud)

是否可以使用这样的组件:

<table>
    <tbody>
        <my-custom-element></my-custom-element>
    </tbody>
</table>
Run Code Online (Sandbox Code Playgroud)

最终产品是这样的:

<table>
    <tbody>
        <tr>
            <p>Hello world!</p>
        </tr>
    </tbody>
</table>
Run Code Online (Sandbox Code Playgroud)

而不是:( Knockout默认情况下渲染组件的方式)

<table>
    <tbody>
        <my-custom-element>
            <tr>
                <p>Hello world!</p>
            </tr>
        </my-custom-element>
    </tbody>
</table>
Run Code Online (Sandbox Code Playgroud)

根据这个问题的答案,似乎这个功能内置于模板引擎中,我假设在渲染组件模板时也会使用它.

是否存在指定的组件应与呈现方式renderModereplaceNode

我知道"虚拟元素"语法,它允许在HTML注释中定义组件:

<table>
    <tbody>
        <!--ko component { name: 'my-custom-element' }--><!--/ko-->
    </tbody>
</table>
Run Code Online (Sandbox Code Playgroud)

但我真的不喜欢这种语法 - 在评论中编写真正的代码感觉就像一个肮脏,肮脏的黑客.

javascript web-component knockout.js knockout-templating knockout-components

5
推荐指数
1
解决办法
3729
查看次数