呼叫quotigoutjs viewModel函数



在此上下文以更好地理解:

我的主页上有一个数据杂志,每行都有一个按钮。当用户单击它时,它通过ajax jquery加载另一个页面,然后将其弹出在引导模态对话框中:

<script>
var sharedadminID = 0;
var alreadyloaded = 0;
...
    function EditClick(args) {
            var gridObj = $("#DetailsGrid").data("ejGrid");
            var data = gridObj.getSelectedRecords()[0].ID;
            sharedadminID = data;
            $("#prdmodalbody").load("pages/modals/AddEditPRD.html");
}
</script>

additprd.html页面的ViewModel所定义为

<script>
        var PRDVM = function () {
            ID = ko.observable();
            DESIGNATION = ko.observable();
            PRIX = ko.observable();
            loadproduct = function () {
                alert("innerloadproduct2222");
                jQuery.ajax({
                    url: "/Admin/GetProduct?i=" + sharedadminID,
                    success: function (html) {
                        ID = html.ID,
                        DESIGNATION = html.DESIGNATION,
                        PRIX = html.PRIX                      
                    },
                    async: false
                });
            }
            loadproduct();
        };
        $(document).ready(function () {
            if (alreadyloaded == 0) {
                VM = new PRDVM();
                ko.applyBindings(VM,        document.getElementById("#prdmodalbody"));
                alreadyloaded = 1;
            }
            else
                VM.loadproduct();
        });
    </script>

第一次单击按钮时它可以工作,但之后却不是。

控制台上没有错误,并且似乎没有触发载荷功能除了第一次。

任何帮助s欢迎

您的代码中有问题点的 lot

  • (过度)使用全球;
  • 尴尬的格式(很难阅读和调试,但也很难为您提供帮助);
  • 同步ajax调用(为什么?这很少是一个好主意,如果您以后将其更改为async,则可以再次打破整个事情);
  • you 覆盖 ID = html.ID;
  • 的可观察属性
  • 语法错误/问题,使用,您打算;
  • 完全不暴露观察物:如果您不揭露它们的任何一个代码应该如何"查看" ID等等?
  • alreadyloaded分隔用作布尔值的组合,而它是一个数字(与==相比而不是更安全的===
  • 为什么在ready回调中完全执行if...else ?无论如何,它应该被称为...

解决所有这些问题,很可能您会找到问题的根本原因。

我认为敲除和DOM操纵的混合是有问题的...您可能可以在更纯净的敲除解决方案中这样做。

话虽如此,我认为问题是您如何修改数据...您必须通过将它们包裹在括号或淘汰赛中来更新可观察的信息,但不会更新视图 - 观察数据。这也是一个很好的习惯,可以使用范围的变量(例如自我)跟踪这一点,这样您就不会在不同的情况下遇到奇怪的范围范围:

    var PRDVM = function () { 
        var self = this;
        self.ID = ko.observable();
        self.DESIGNATION = ko.observable();
        self.PRIX = ko.observable();
        self.loadproduct = function () {
            alert("innerloadproduct2222");
            jQuery.ajax({
                url: "/Admin/GetProduct?i=" + sharedadminID,
                success: function (html) {
                    self.ID(html.ID);
                    self.DESIGNATION(html.DESIGNATION);
                    self.PRIX(html.PRIX);                      
                },
                async: false
            });
        }
        self.loadproduct();
    };
    $(document).ready(function () {
        if (alreadyloaded == 0) {
            VM = new PRDVM();
            ko.applyBindings(VM,        document.getElementById("#prdmodalbody"));
            alreadyloaded = 1;
        }
        else
            VM.loadproduct();
    });

相关内容

  • 没有找到相关文章

最新更新