标签: knockout-mapping-plugin

Knockout JS映射插件混乱

我在使用映射插件时应该在何时何地声明我的viewModel时感到困惑.

这是我的json文件:

{
    "members": [
        {
            "memberid": "001",
            "membername": "Jason"
        },
       {
            "memberid": "002",
            "membername": "Bob"
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

这是html模板:

<div data-bind="foreach: members">
<h3 data-bind="text: memberid"></h3>
<p>Name: <span data-bind="text: membername"></span></p>  
</div>
Run Code Online (Sandbox Code Playgroud)

其余部分如下:

var data = $.getJSON("members.json",function(data)  
            {
                var viewModel = ko.mapping.fromJSON(data);
                 ko.applyBindings(viewModel);

            }
        );

ko.mapping.fromJSON(data, viewModel);
Run Code Online (Sandbox Code Playgroud)

提前感谢你的帮助!

knockout-mapping-plugin knockout.js

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

使用KnockoutJS对带有对象的下拉列表进行初始选择

我有一个看起来像这样的模型(不是实际的代码所以不介意可能的错误输入).

model = function(option, items) {
    self = this;
    self.options = options;
    self.items = ko.mapping.fromJS(items);
}
Run Code Online (Sandbox Code Playgroud)

options的coantains列表对象,人们可以从一个下拉列表中选择.在items还包含对象的列表,其中每个对象具有一个像中的选项列表一个相同的对象.

然后,我遍历项目列表并在每行上显示一个下拉框.我这里需要将项目列表中当前项目中的对象作为选定选项.然而,当我没有设置optionValue但只尝试匹配整个对象时它不起作用...然后我的observable工作正常,并且整个对象的所有订阅字段都使用新选择进行更新.然而,我得到了初始选择以使用optionValue,Id如下所示.

<select data-bind="options: $parent.options, optionsValue:'Id', optionsText: 'Name', value: item.Id"></select> 
Run Code Online (Sandbox Code Playgroud)

我现在的问题是只有绑定到Id的元素才会更新?我需要更新当前项目的所有属性,即使它只是当我在下拉列表中更改内容时现在更改的ID.

我该怎么做?

javascript knockout-mapping-plugin knockout.js

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

在KnockoutJS中获取多维数组(对象)可观察

我正在使用Knockout构建一个应用程序,并发现它非常有用.虽然,我有一个问题,获得多维数组(对象)可观察.

目前我正在使用以下结构:

    self.form = ko.observableArray(ko.utils.arrayMap(initialData, function(section) {
        var result = { 
            name : section.name, 
            code : section.code, 
            type : section.type, 
            fields: ko.observableArray(section.fields) 
        };
        return result;
    }));
Run Code Online (Sandbox Code Playgroud)

它运行良好,但如果initialData超过两个级别,我无法使其工作.我试过类似的东西

    self.form = ko.observableArray(ko.utils.arrayMap(initialData, function(block) {
        var result = { 
            name : block.name, 
            code : block.code, 
            type : block.type, 
            sections: ko.observableArray(ko.utils.arrayMap(block.sections, function(section) {
                var result = { 
                    name : section.name, 
                    code : section.code, 
                    type : section.type, 
                    fields: ko.observableArray(section.fields) 
                };
                return result;
            }))
        };
        return result;
    }));
Run Code Online (Sandbox Code Playgroud)

最终的数组结构看起来不错,但是当我在推送到sections数组时,淘汰不会更新DOM:

    self.addField = function( section ) …
Run Code Online (Sandbox Code Playgroud)

knockout-mapping-plugin knockout-2.0 knockout.js

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

使用knockout.js绑定到foreach绑定的选定项目

我使用knockout.js和ko.mapping插件将json对象列表绑定到html网格.让每个项目称为卡片(以下简化示例)

{
    "card": [
        {
            "Id": "cards/1",
            "category": "Demo",
            "title": "Card 1",
            "description": "bla bla",
            "picture": "demo1.jpg ",
            "madeBy": "user/1"
        },
        {
            "Id": "cards/2",
            "category": "Demo",
            "title": "Card 2",
            "description": "bla bla",
            "picture": "demo2.jpg",
            "madeBy": "user/2"
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

我像这样绑定每个elemet:

 <div data-bind="foreach: card">
    <span data-bind="text:title"></span>
    <a data-bind='click: show'><img data-bind="attr:{src: picture}" /></a>
</div>
Run Code Online (Sandbox Code Playgroud)

当用户点击卡片时,我想在选定的json对象中使用更多属性显示所选卡片在不同的div(foreach之外)中

我应该从视图模型绑定到一张选定的卡?

我正在尝试类似的东西(但没有得到任何数据):

<h1 data-bind="text: $data.title"> </h1>
Run Code Online (Sandbox Code Playgroud)

knockout-mapping-plugin knockout.js

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

Knockout.js双向绑定:格式化为字符串的数字

我的视图模型中有一堆金额是可观察的,我希望它们存储为数字,因为它们用于多次计算.但是,当我将它们绑定到我视图中的文本框时,我希望它们显示为特殊格式的字符串(1234.5678 =>"1,234.57").在这种情况下实现双向绑定的最佳方法是什么,因为我不能只使用与我的observable的值绑定?

用户需要能够在文本框中输入"1,234.56"或"1234.56",这将在observable中存储数字值1234.56,如果我通过javascript更改数值(3450),则需要将文本框值更新为新值,但格式化为字符串("3,450").

我很感激帮助!

javascript knockout-mapping-plugin knockout-2.0 knockout.js knockout-validation

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

如何清除击倒中的可观察属性?

我有javascript代码块和html如下.模型对象是通用的.它在运行时定义.

它可以是这样的.

var model = { "xId": ko.observable(0), "xName": ko.observable(null), "Type": ko.observable("x") };
   /* var model = { "yId": ko.observable(0), "yName": ko.observable(null), "Type": ko.observable("y") };
    var model = { "zId": ko.observable(0), "zName": ko.observable(null), "Type": ko.observable("z") };  */

    var vm = function (data) {
        ko.mapping.fromJS(data, {}, this);
    };

    var vm2 = function () {
        var self = this;
        self.New = ko.observable(null);
        self.NewItem = function () {
            console.log(model);
            self.New(new vm(model));
        };
    };

    var viewModel = new vm2();
    ko.applyBindings(viewModel);

    vm.prototype.Save = function () …
Run Code Online (Sandbox Code Playgroud)

knockout-mapping-plugin knockout.js

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

Knockout阵列订阅无法正常工作

我已经尝试了几天让Knockout每次在人员列表中的"邮政编码"值发生变化时举起一个事件.我尝试了各种方法来实现这种行为,但似乎无法做到这一点.目前,这是我的Html: -

<table>
    <thead>
        <tr>
            <th>First name</th>
            <th>Last Name</th>
            <th>Age</th>
            <th>Zip Code</th>
        </tr>
    </thead>
    <tbody data-bind="foreach: people">
        <tr>
            <td data-bind="text: firstName"></td>
            <td data-bind="text: lastName"></td>
            <td data-bind="text: age"></td>
            <td ><input id="zipCodInput" data-bind="value: zipCode" /></td>
        </tr>
    </tbody>
</table>
</body>
Run Code Online (Sandbox Code Playgroud)

这是我填充表格的脚本: -

<script>
    jQuery(document).ready(function () {

        // Ultimately will come from an Ajax call
        //var result = $.ajax({
        //    type: "GET",
        //    url: "/api/Resource",
        //    async: false
        //}).responseText;

        // Hard coded array for testing
        var result = [{ "firstName": "Jimmy", "lastName": "Smith", "age": …
Run Code Online (Sandbox Code Playgroud)

knockout-mapping-plugin knockout-2.0 knockout.js

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

如何使用淘汰映射插件?

我想使用插件来填充数据,但不会填充值.

简单的例子:

var data = {
    Type: 1,
    Id: "123-12321"
};

var RiskItemModel = function (item) {
    var self = this;
    self.Id = ko.observable("tes");
    self.Type = ko.observable(); //enum int


    if (item) {
      // DATA SHOULD BE POPULATED HERE, but no effect
      ko.mapping.fromJS(item, this);
    };
};

var model = new RiskItemModel(data);
ko.applyBindings(model);

// I HAVE TRIED THIS ALSO, NO EFFECT
//ko.mapping.fromJS(data, model);
Run Code Online (Sandbox Code Playgroud)

HTML:

<div>
    <pre data-bind="text: ko.toJSON($data, null, 2)"></pre>
</div>
Run Code Online (Sandbox Code Playgroud)

JSFidde:http://jsfiddle.net/wLbV6/

knockout-mapping-plugin knockout.js

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

如何在淘汰赛中获得json回应?

我想得到一个从json到淘汰赛js的数组.为此,我使用此代码,我试图在adobe cq中实现.但我无法得到答复所以任何机构可以帮助我的代码

在jsp中

 <table id="timesheets" class="table table-striped table-hover table-condensed">   
<thead>
    <tr>
        <th>First Name</th>
        <th>Last Name</th>
        <th>Month</th>
        <th>Year</th>
    </tr>
</thead>
   <tbody data-bind="foreach: viewModel.timesheets">
    <tr>
        <td data-bind="text: firstname"></td>
        <td data-bind="text: lastname"></td>
        <td data-bind="text: month"></td>
        <td data-bind="text: year"></td>
    </tr>
</tbody>
 </table>
Run Code Online (Sandbox Code Playgroud)

在脚本中

<script>
 $(function () {
    ko.applyBindings(viewModel);
    viewModel.loadTimesheets();
});
function timesheet(timesheet) {
    this.id = ko.observable(timesheet.id);
    this.firstname = ko.observable(timesheet.firstname);
    this.lastname = ko.observable(timesheet.lastname);
    this.month = ko.observable(timesheet.month);
    this.year = ko.observable(timesheet.year);
}
var viewModel = {
    timesheets: ko.observableArray([]),

loadTimesheets: function () {
    var self = this;
    $.getJSON("/content/personal/test0/jcr:content/content-page/horizontalline.json",function …
Run Code Online (Sandbox Code Playgroud)

javascript json getjson knockout-mapping-plugin knockout.js

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

Knockout ko.mappings.fromJS无法正常工作

我正在尝试使用淘汰映射,但它没有像我预期的那样工作.在这里,我创造了最简单的小提琴,但它不起作用.

我错过了什么吗?

https://jsfiddle.net/p48d11j5/1/

function Model(){
    var self = this;

    self.Id = ko.observable(0);
    self.Name = ko.observable("Default");
    self.Visible = ko.observable(false);
    self.Items = ko.observableArray([]);
}

function ModelItem(){
    var self = this;

    self.Id = ko.observable(0);
    self.Name = ko.observable("Default item name")
}

var m = new Model();

ko.mapping.fromJS({
    Id:1,
    Name: "Test",
    Visible: true,
    Items: [
    {
        Id:1,
        Name:"First"
    },
    {
        Id:2,
        Name:"Second"
    }
  ]
}, m);

ko.applyBindings(m);
Run Code Online (Sandbox Code Playgroud)

编辑:我正在使用嵌套数组,所以我添加了数组

edit2:我希望模型"键入"以使用它们的函数或ko.computed属性

javascript knockout-mapping-plugin knockout.js

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